下载帮

您现在的位置是:首页 > 数据库 > MsSQL

MsSQL

SQL Server 系统存储过程

2022-01-29 18:46MsSQL
1. sp_executesql

执行可以多次重复使用或动态生成的Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

参数@statement和@params,必须是Unicode 常量或Unicode 变量。以字母N 为前缀的字符串,表示Unicode 字符串常量。不允许使用更复杂的Unicode 表达式(例如使用+ 运算符连接两个字符串)。不允许使用字符常量。如果指定了Unicode 常量,则必须使用 N 作为前缀

语法:sp_executesql [ @statement = ] statement

[

{ , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }

{ , [ @param1 = ] 'value1' [ ,...n ] }

]

示例:

A.  根据参数@SId查询Student学生信息表

EXEC sp_executesql N'SELECT * FROM Student WHERE Id=@SId', N'@SId int', @SId=3;

结果集:


B.  使用输出参数的sp_executesql(示例1)

DECLARE @Name varchar(20);

EXECUTE sp_executesql N'SELECT @Name=Name FROM Student WHERE Id=@Id;', N'@Name varchar(20) OUTPUT, @Id int', @Name OUTPUT, @Id=3;

PRINT @Name;

结果输出(Id=3的学生姓名):向北京

C.  使用输出参数的sp_executesql(示例2)

DECLARE @sql AS NVARCHAR(12),@i AS INT;

SET @sql = N'SET @p = 10';

EXEC sp_executesql @sql, N'@p AS INT OUTPUT', @p = @i OUTPUT;

PRINT @i;

结果输出:10

D.  官方示例代码(以下示例使用 OUTPUT 参数将由 SELECT 语句生成的结果集存储于 @SQLString 参数中。然后将执行两个使用 OUTPUT 参数值的 SELECT 语句。)

USE AdventureWorks2008R2;

GO

DECLARE @SQLString nvarchar(500);

DECLARE @ParmDefinition nvarchar(500);

DECLARE @SalesOrderNumber nvarchar(25);

DECLARE @IntVariable int;

SET @SQLString = N'SELECT @SalesOrderOUT = MAX(SalesOrderNumber)

FROM Sales.SalesOrderHeader

WHERE CustomerID = @CustomerID';

SET @ParmDefinition = N'@CustomerID int,

@SalesOrderOUT nvarchar(25) OUTPUT';

SET @IntVariable = 22276;

EXECUTE sp_executesql

@SQLString,

@ParmDefinition,

@CustomerID = @IntVariable,

@SalesOrderOUT = @SalesOrderNumber OUTPUT;

-- This SELECT statement returns the value of the OUTPUT parameter.

SELECT @SalesOrderNumber;

-- This SELECT statement uses the value of the OUTPUT parameter in

-- the WHERE clause.

SELECT OrderDate, TotalDue

FROM Sales.SalesOrderHeader

WHERE SalesOrderNumber = @SalesOrderNumber;

 

2.  sp_rename

修改数据库名称、数据表名称、列名称。在当前数据库中更改用户创建对象的名称。此对象可以是表、索引、列、别名数据类型或Microsoft .NET Framework 公共语言运行时(CLR) 用户定义类型。

注意:更改对象名的任一部分都可能破坏脚本和存储过程。我们建议您不要使用此语句来重命名存储过程、触发器、用户定义函数或视图;而是删除该对象,然后使用新名称重新创建该对象。

语法:sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'

[ , [ @objtype = ] 'object_type' ]

示例:

A.  重命名数据库名称

EXEC sp_rename 'SMB6Comp10', 'SMB6Comp10Test', 'database';

B. 重命名数据表名称

EXEC sp_rename 'dbo.accApportion', 'accApportionTest';

C.  重命名列名称

EXEC sp_rename 'dbo.accApportion.ApportionAmount', 'ApportionAmountTest', 'column';

D.  重命名索引名称

EXEC sp_rename 'Student.index_name', 'my_index_name', 'index';

 

3.  sp_renamedb

更改数据库的名称。

语法:sp_renamedb [ @dbname = ] 'old_name' , [ @newname = ] 'new_name'

示例:

A.  将数据库名称RM_DB改为My_RM_DB

EXEC sp_renamedb RM_DB, My_RM_DB;

 

4.  sp_defaultdb

更改Microsoft SQL Server 登录名的默认数据库。

语法:sp_defaultdb [ @loginame = ] 'login' , [ @defdb = ] 'database'

示例:

A.  设置sa登录名的默认数据库为RM_DB

EXEC sp_defaultdb 'sa', 'RM_DB';

 

5.  sp_password

为Microsoft SQL Server 登录名添加或更改密码。

语法:sp_password [ [ @old = ] 'old_password' , ]

{ [ @new =] 'new_password' }

[ , [ @loginame = ] 'login' ]

示例:

A.  将登录名sa的密码0618改为0225

EXEC sp_password '0618', '0225', 'sa';

 

6.  sp_help

查询指定数据表或其他对象的信息。报告有关数据库对象(sys.sysobjects 兼容视图中列出的所有对象)、用户定义数据类型或某种数据类型的信息。

语法:sp_help [ [ @objname = ] 'name' ]

示例:

A. 查询accApportion数据表信息

EXEC sp_help 'accApportion';

 

7. sp_helpdb

报告有关指定数据库或所有数据库的信息。

语法:sp_helpdb [ [ @dbname= ] 'name' ]

示例:

A.  查询所有数据库的信息列表

EXEC sp_helpdb;

结果集:


B.  查询RM_DB数据库的信息

EXEC sp_helpdb RM_DB;

结果集:


 

8. sp_databases

查询当前数据库引擎实例中的数据库列表。列出驻留在SQL Server 2005 数据库引擎实例中的数据库或可以通过数据库网关访问的数据库。

语法:sp_databases

示例:

A.  查看所有的数据库列表

EXEC sp_databases;

结果集:

 

9. sp_tables

查询当前数据库中的数据表和视图。返回可在当前环境中查询的对象列表。也就是说,返回任何用户表、系统表或视图(不包括同义词对象)。

语法:sp_tables [ [ @table_name = ] 'name' ]

[ , [ @table_owner = ] 'owner' ]

[ , [ @table_qualifier = ] 'qualifier' ]

[ , [ @table_type = ] "type" ]

[ , [@fUsePattern = ] 'fUsePattern'];

示例:

A. 查询RM_DB数据库中数据表和视图

EXEC sp_tables;

结果集:

 

10.  sp_columns

查询指定表的列信息列表。返回在当前环境中可查询的指定对象的列信息。

注释:TYPE_NAME列如果值为[int identity],表示此列为自增列。

语法:sp_columns [ @table_name = ] object  [ , [ @table_owner = ] owner ]

[ , [ @table_qualifier = ] qualifier ]

[ , [ @column_name = ] column ]

[ , [ @ODBCVer = ] ODBCVer ]

示例:

A.  查询Student数据表中列信息列表。

EXEC sp_columns Student;

 

11. sp_helpIndex

报告有关表或视图上索引的信息。

语法:sp_helpindex [ @objname = ] 'name'

示例:

A. 查询Student数据表中的索引的信息。

EXEC sp_helpIndex Student;

结果集:

12.  sp_helpConstraint

查询指定数据表中的约束信息。返回一个列表,其内容包括所有约束类型、约束类型的用户定义或系统提供的名称、定义约束类型时用到的列,以及定义约束的表达式(仅适用于DEFAULT 和CHECK 约束)。

语法:sp_helpconstraint [ @objname = ] 'table' [ , [ @nomsg = ] 'no_message' ]

示例:

A.  查询Student数据表中的约束信息。

EXEC sp_helpConstraint Student;

结果集:


 

13.  sp_sproc_columns

为当前环境中的单个存储过程或用户定义函数返回列信息。

语法:sp_sproc_columns [[@procedure_name = ] 'name']

[ , [@procedure_owner = ] 'owner']

[ , [@procedure_qualifier = ] 'qualifier']

[ , [@column_name = ] 'column_name']

[ , [@ODBCVer = ] 'ODBCVer']

[ , [@fUsePattern = ] 'fUsePattern']

示例:

A. 查看“MyProc”存储过程的返回列信息

EXEC sp_sproc_columns MyProc;

结果集:


 

14.  sp_procoption

设置自动执行的存储过程。设置为自动执行的存储过程在每次启动SQL Server 实例时运行。

注释:启动过程必须位于 master 数据库中,并且不能包含INPUT 或OUTPUT 参数。所有数据库恢复后将开始执行存储过程,并在开始时记录“恢复已完成”消息。

语法:sp_procoption [ @ProcName = ] 'procedure'

, [ @OptionName = ] 'option'

, [ @OptionValue = ] 'value'

参数

[ @ProcName = ] 'procedure'

为其设置选项的过程的名称。procedure 的数据类型为 nvarchar(776),无默认值。

[ @OptionName = ] 'option'

要设置的选项的名称。option 的唯一值为 startup。

[ @OptionValue = ] 'value'

指示是将选项设置为开启(true 或 on)还是关闭(false 或 off)。value 的数据类型为 varchar(12),无默认值。

示例:

A.  每次启动服务"MYMSSQLSERVER08"示例时,自动调用存储过程

--创建“proc_Start”存储过程

USE master;

IF (OBJECT_ID('proc_Start', 'P') IS NOT NULL)

DROP PROCEDURE proc_Start;

GO

CREATE PROCEDURE proc_Start

AS

--记录启动服务时间

CREATE TABLE ##MyTempTable(OpenDate datetime);

INSERT INTO ##MyTempTable VALUES(GETDATE());

GO

--设置:每次启动“MYMSSQLSERVER08”示例时,调用“proc_Start”存储过程

EXEC sp_procoption

@ProcName='proc_Start',

@OptionName='startup',

@OptionValue='true';

 

15. sp_stored_procedures

返回当前环境中的存储过程列表。

语法:sp_stored_procedures [ [ @sp_name = ] 'name' ]

[ , [ @sp_owner = ] 'schema']

[ , [ @sp_qualifier = ] 'qualifier' ]

[ , [@fUsePattern = ] 'fUsePattern' ]

示例:

A. 查询当前数据库中存储过程列表。

EXEC sp_stored_procedures;

结果集:


 

16.  sp_helptext

查询未加密的存储过程、函数、触发器等的定义语句。显示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。

语法:sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]

示例:

A. 查询sp_stored_procedures系统存储过程定义语句

EXEC sp_helptext 'sp_stored_procedures';

结果集:

 

17.  sp_helptrigger

查询指定数据表中和类型的触发器信息。返回对当前数据库的指定表定义的DML 触发器的类型。sp_helptrigger 不能用于DDL 触发器。而用于查询系统存储过程目录视图。

语法:sp_helptrigger [ @tabname = ] 'table'

[ , [ @triggertype = ] 'type' ]

示例:

A. 查询SECheckoutReportBill数据表中的所有触发器

EXEC sp_helptrigger SECheckoutReportBill;

结果集:


B. 查询SECheckoutReportBill数据表中INSERT类型的触发器

EXEC sp_helptrigger SECheckoutReportBill, 'INSERT';

结果集:


 

18.  sp_pkeys

返回当前环境中单个表的主键信息。

语法:sp_pkeys [ @table_name = ] 'name'

[ , [ @table_owner = ] 'owner' ]

[ , [ @table_qualifier = ] 'qualifier' ]

示例:

A. 查询SECheckoutReportBill数据表中的主键信息

EXEC sp_pkeys SECheckoutReportBill;

结果集:


 

19.  sp_fkeys

返回当前环境的逻辑外键信息。该过程显示各种外键关系,包括禁用的外键。

语法:sp_fkeys [ @pktable_name = ] 'pktable_name'

[ , [ @pktable_owner = ] 'pktable_owner' ]

[ , [ @pktable_qualifier = ] 'pktable_qualifier' ]

{ , [ @fktable_name = ] 'fktable_name' }

[ , [ @fktable_owner = ] 'fktable_owner' ]

[ , [ @fktable_qualifier = ] 'fktable_qualifier' ]

示例:

B. 查询SECheckoutReportBill数据表中的外键信息

EXEC sp_pkeys SECheckoutReportBill;

 

20.  sp_who

查询数据库引擎实例中的回话和进程信息。提供有关Microsoft SQL Server 数据库引擎实例中的当前用户、会话和进程的信息。可以筛选信息以便只返回那些属于特定用户或特定会话的非空闲进程。

语法:sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

示例:

A. 查询sa登录名的会话和进程信息

EXEC sp_who sa;

结果集:

 

21.  sp_cursor_list

报告当前为连接打开的服务器游标的属性。

语法:sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT

, [ @cursor_scope = ] cursor_scope[;]

 

22. sp_describe_cursor

报告服务器游标的属性。

语法:sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT

{ [ , [ @cursor_source = ] N'local'

, [ @cursor_identity = ] N'local_cursor_name' ]

| [ , [ @cursor_source = ] N'global'

, [ @cursor_identity = ] N'global_cursor_name' ]

| [ , [ @cursor_source = ] N'variable'

, [ @cursor_identity = ] N'input_cursor_variable' ]

} [;]

 

23. sp_describe_cursor_columns

报告服务器游标结果集中的列属性。

语法:sp_describe_cursor_columns

[ @cursor_return = ] output_cursor_variable OUTPUT

{ [ , [ @cursor_source = ] N'local' ,

[ @cursor_identity = ] N'local_cursor_name' ]

| [ , [ @cursor_source = ] N'global' ,

[ @cursor_identity = ] N'global_cursor_name' ]

| [ , [ @cursor_source = ] N'variable' ,

[ @cursor_identity = ] N'input_cursor_variable' ]

}

可能将获得如图结果:


 

24. sp_describe_cursor_tables

报告由服务器游标引用的对象或基表。

语法:sp_describe_cursor_tables

[ @cursor_return = ] output_cursor_variable OUTPUT

{ [ , [ @cursor_source = ] N'local'

, [ @cursor_identity = ] N'local_cursor_name' ]

| [ , [ @cursor_source = ] N'global'

, [ @cursor_identity = ] N'global_cursor_name' ]

| [ , [ @cursor_source = ] N'variable'

, [ @cursor_identity = ] N'input_cursor_variable' ]

} [;]


 

25. sp_lock

报告有关锁的信息。

语法:sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ][ ; ]

示例:

EXEC sp_lock;

结果集:


 

26. sp_getapplock

对应用程序资源设置锁。

语法:sp_getapplock [ @Resource = ] 'resource_name' ,

[ @LockMode = ] 'lock_mode'

[ , [ @LockOwner = ] 'lock_owner' ]

[ , [ @LockTimeout = ] 'value' ]

[ , [ @DbPrincipal = ] 'database_principal' ][ ; ]

示例:

 

27. sp_releaseapplock

为应用程序资源释放锁。

语法:sp_releaseapplock [ @Resource = ] 'resource_name'

[ , [ @LockOwner = ] 'lock_owner' ]

[ , [ @DbPrincipal = ] 'database_principal' ][ ; ]

示例:

 

28. sp_server_info

返回SQL Server、数据库网关或基础数据源的属性名称和匹配值的列表。

语法:sp_server_info [[@attribute_id = ] 'attribute_id']

示例:

 

29. sp_statistics

返回针对指定的表或索引视图的所有索引和统计信息的列表。

语法:sp_statistics [ @table_name = ] 'table_name' 

[ , [ @table_owner = ] 'owner' ]

[ , [ @table_qualifier = ] 'qualifier' ]

[ , [ @index_name = ] 'index_name' ]

[ , [ @is_unique = ] 'is_unique' ]

[ , [ @accuracy = ] 'accuracy' ]

示例:

 

30. sp_addumpdevice

将备份设备添加到Microsoft SQL Server 2005 数据库引擎的实例中。

语法:sp_addumpdevice [ @devtype = ] 'device_type'

, [ @logicalname = ] 'logical_name'

, [ @physicalname = ] 'physical_name'

[ , { [ @cntrltype = ] controller_type |

[ @devstatus = ] 'device_status' } ]

示例:

A.  备份RM_DB数据库

USE master;

EXEC sp_addumpdevice 'disk', 'testBack', 'D:\RM_DB.bak';

--开始备份

BACKUP DATABASE RM_DB TO testBack;

 

31. sp_addextendedproperty

将新扩展属性添加到数据库对象中。

语法:sp_addextendedproperty

[ @name = ] { 'property_name' }

[ , [ @value = ] { 'value' }

[ , [ @level0type = ] { 'level0_object_type' }

, [ @level0name = ] { 'level0_object_name' }

[ , [ @level1type = ] { 'level1_object_type' }

, [ @level1name = ] { 'level1_object_name' }

[ , [ @level2type = ] { 'level2_object_type' }

, [ @level2name = ] { 'level2_object_name' }

]]]] [;]

示例:

A.  将“商品名称”属性添加到Goods表的GoodsName列中。

EXEC sys.sp_addextendedproperty @name=N'MS_Description',

@value=N'商品名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Goods', @level2type=N'COLUMN',@level2name=N'GoodsName'

 

32. sp_updateextendedproperty

更新现有扩展属性的值。

示例:

A.  将“商品名称”改为“商品名称2”。

EXEC sys.sp_addextendedproperty @name=N'MS_Description',

@value=N'商品名称2' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Goods', @level2type=N'COLUMN',@level2name=N'GoodsName'

 

33. sp_dropextendedproperty

删除现有的扩展属性。

示例:

A.  删除GoodsName 的扩展属性。

EXEC sys.sp_dropextendedproperty @name=N'MS_Description', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Goods', @level2type=N'COLUMN',@level2name=N'GoodsName'

文章评论