sql_statement
过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。
n
是表示此过程可以包含多条 Transact-SQL 语句的占位符。
注释
存储过程的最大大小为 128 MB。
用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是
在 tempdb 中创建)。在单个批处理中,CREATE PROCEDURE 语句不能与
其它 Transact-SQL 语句组合使用。
默认情况下,参数可为空。如果传递 NULL 参数值并且该参数在 CREATE 或
ALTER TABLE 语句中使用,而该语句中引用的列又不允许使用 NULL,则
SQL Server 会产生一条错误信息。为了防止向不允许使用 NULL 的列传递
NULL 参数值,应向过程中添加编程逻辑或为该列使用默认值(使用 CREATE
或 ALTER TABLE 的 DEFAULT 关键字)。
建议在存储过程的任何 CREATE TABLE 或 ALTER TABLE 语句中都为每列显
式指定 NULL 或 NOT NULL,例如在创建临时表时。ANSI_DFLT_ON 和
ANSI_DFLT_OFF 选项控制 SQL Server 为列指派 NULL 或 NOT NULL 特性
的方式(如果在 CREATE TABLE 或 ALTER TABLE 语句中没有指定的话)。
如果某个连接执行的存储过程对这些选项的设置与创建该过程的连接的设置不
同,则为第二个连接创建的表列可能会有不同的为空性,并且表现出不同的行
为方式。如果为每个列显式声明了 NULL 或 NOT NULL,那么将对所有执行该
存储过程的连接使用相同的为空性创建临时表。
在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER
和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,
所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在
执行存储过程时都将被忽略。在存储过程中出现的 SET
QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。
其它 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET
ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取
决于特定的设置,应在过程开头添加一条 SET 语句,以确保设置正确。从存储
过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将恢
复为调用存储过程时的值。这使个别的客户端可以设置所需的选项,而不会影
响存储过程的逻辑。
说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,
由兼容级别设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符
串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为
空字符串。有关更多信息,请参见 sp_dbcmptlevel。
获得有关存储过程的信息