SQL Server存储过程SET选项

Rac*_*erX 3 t-sql sql-server sql-server-2005 sql-server-2008

在创建存储过程之前要发出的最佳SET选项是什么?

例如

SET QUOTED_IDENTIFIER  OFF
SET ANSI_NULLS  ON 

CREATE PROCEDURE HelloWorld
AS
    --also, should any be issued within the procedure body?
    PRINT 'hello world!'
    RETURN 0
GO
Run Code Online (Sandbox Code Playgroud)

最好的,我的意思是最喜欢的设置.

Ric*_*iwi 5

具体而言,对于存储过程创建,在解析时只有两个很重要

SET ANSI_NULLS
SET QUOTED_IDENTIFIER
Run Code Online (Sandbox Code Playgroud)

并且它们应该打开以使用较新的SQL Server功能,这些功能仅适用于这些功能

存储过程使用在执行时指定的SET设置执行,但SET ANSI_NULLS和SET QUOTED_IDENTIFIER除外.指定SET ANSI_NULLS或SET QUOTED_IDENTIFIER的存储过程使用在存储过程创建时指定的设置.如果在存储过程中使用,则忽略任何SET设置.

参考:http://msdn.microsoft.com/en-us/library/ms190356.aspx

要同时设置和其他设置,请使用

SET ANSI_DEFAULTS ON
Run Code Online (Sandbox Code Playgroud)

启用(ON)时,此选项启用以下ISO设置:

SET ANSI_NULLS
SET CURSOR_CLOSE_ON_COMMIT
SET ANSI_NULL_DFLT_ON
SET IMPLICIT_TRANSACTIONS
SET ANSI_PADDING
SET QUOTED_IDENTIFIER
SET ANSI_WARNINGS
Run Code Online (Sandbox Code Playgroud)

为了完整性,在连接级别设置其他三个,这样可以使INDEXED VIEWs之类的东西正常工作

SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
Run Code Online (Sandbox Code Playgroud)