其 它 SET 选 项 ( 例 如 SET ARITHABORT 、 SET ANSI_WARNINGS 或 SET
ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取决于特定的
设置,应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,
该设置只在存储过程完成之前有效。之后,设置将恢复为调用存储过程时的值。这使个别
的客户端可以设置所需的选项,而不会影响存储过程的逻辑。
天涯风云 19:30:43
说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由兼容级别
设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果
兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。
获得有关存储过程的信息
若要显示用来创建过程的文本,请在过程所在的数据库中执行 sp_helptext,并使用过
程名作为参数。
说明 使用 ENCRYPTION 选项创建的存储过程不能使用 sp_helptext 查看。
若要显示有关过程引用的对象的报表,请使用 sp_depends。
若要为过程重命名,请使用 sp_rename。
引用对象
SQL Server 允许创建的存储过程引用尚不存在的对象。在创建时,只进行语法检查。
执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。只有在编译
过程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在
的对象,则仍可以成功创建,但在运行时将失败,因为所引用的对象不存在。
延迟名称解析和兼容级别
SQL Server 允许 Transact-SQL 存储过程在创建时引用不存在的表。这种能力称为延迟
名称解析。不过,如果 Transact-SQL 存储过程引用了该存储过程中定义的表,而兼容级别
设置(通过执行 sp_dbcmptlevel 来设置)为 65,则在创建时会发出警告信息。而如果在运
行时所引用的表不存在,将返回错误信息。
执行存储过程
成功执行 CREATE PROCEDURE 语句后,过程名称将存储在 sysobjects 系统表中,而
CREATE PROCEDURE 语句的文本将存储在 syscomments 中。第一次执行时,将编译该过
程以确定检索数据的最佳访问计划。
使用 cursor 数据类型的参数
存储过程只能将 cursor 数据类型用于 OUTPUT 参数。如果为某个参数指定了 cursor 数
据类型,也必须指定 VARYING 和 OUTPUT 参数。如果为某个参数指定了 VARYING 关键