2011-03-11 75 views
3

什麼是在存儲過程創建之前發出的最佳SET選項?SQL Server存儲過程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 

通過最好的,我的意思是最優選的設置。

回答

5

對於創建存儲過程明確,那麼只有兩個是重要的分析時

SET ANSI_NULLS 
SET QUOTED_IDENTIFIER 

而且應該ON與新的SQL Server的功能,只有工作,這些爲ON

工作

存儲過程使用在執行時指定的SET設置執行,除了SET ANSI_NULLS和SET QUOTED_IDENTIFIE R.指定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 
-2

我通常不會麻煩設置任何之前的過程。在proc中通常使用SET NOCOUNT ON,如果它只是一個選擇SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

+2

未提交的閱讀應謹慎使用。如果它是一個存儲過程,它很可能不想對任何數據進行髒讀。 – DaveShaw 2011-03-11 20:56:48

+1

爲什麼不呢?如果我所做的只是拉取數據,爲什麼要鎖定整個表格?如果對生產數據庫運行大型查詢,能夠執行髒讀操作非常重要。當然,應該針對報告數據庫運行大型查詢,但是當上層管理人員想要在中午執行每日活動報告時,您還有什麼要做?鎖定數據庫,以便他們可以運行他們的報告? – cadrell0 2011-03-15 18:27:10

1

事務隔離級別(通常是讀取提交 - 以確保沒有髒讀)。除非您對受影響的行數感興趣;設置計數在