SQL Server存储过程SET选项

时间:2011-03-11 20:51:28

标签: sql-server sql-server-2005 tsql 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

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

3 个答案:

答案 0 :(得分:5)

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

SET ANSI_NULLS
SET QUOTED_IDENTIFIER

他们应该开启以使用更新的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

启用(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

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

SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF

答案 1 :(得分:1)

事务隔离级别(通常是Read committed - 以确保没有脏读)。除非你对受影响的行数感兴趣;

上设置nocount

答案 2 :(得分:-3)

我通常不会在proc之前设置任何设置。在proc中,我只使用SET NOCOUNT ON,如果它只是一个选择SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED