blog.Toby

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks

          SET  NOCOUNT

          SET NOCOUNT
          使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。

          語法
          SET NOCOUNT { ON | OFF }

          注釋
          當 SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。當 SET NOCOUNT 為 OFF 時,返回計數。

          即使當 SET NOCOUNT 為 ON 時,也更新 @@ROWCOUNT 函數。

          當 SET NOCOUNT 為 ON 時,將不給客戶端發送存儲過程中的每個語句的 DONE_IN_PROC 信息。當使用 Microsoft SQL Server 提供的實用工具執行查詢時,在 Transact-SQL 語句(如 SELECT、INSERT、UPDATE 和 DELETE)結束時將不會在查詢結果中顯示"nn rows affected"。

          如果存儲過程中包含的一些語句并不返回許多實際的數據,則該設置由于大量減少了網絡流量,因此可顯著提高性能。

          SET NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。

          權限
          SET NOCOUNT 權限默認授予所有用戶。

          結論:我們應該在存儲過程的頭部加上SET NOCOUNT ON 這樣的話,在退出存儲過程的時候加上 SET NOCOUNT OFF這樣的話,以達到優化存儲過程的目的。

          多說兩句:

          1:在查看SqlServer的幫助的時候,要注意“權限”這一節,因為某些語句是需要一定的權限的,而我們往往忽略。

          2:@@ROWCOUNT是返回受上一語句影響的行數,包括找到記錄的數目、刪除的行數、更新的記錄數等,不要認為只是返回查找的記錄數目,而且@@ROWCOUNT要緊跟需要判斷語句,否則@@ROWCOUNT將返回0。

          3:如果使用表變量,在條件表達式中要使用別名來替代表名,否則系統會報錯。

          4:在CUD類的操作中一定要有事務處理。

          5:使用錯誤處理程序,用來檢查 @@ERROR 系統函數的 T-SQL 語句 (IF) 實際上在進程中清除了 @@ERROR 值,無法再捕獲除零之外的任何值,必須使用 SET 或 SELECT 立即捕獲錯誤代碼。

          SET ANSI_NULLS

          SQL-92 標準要求在對空值進行等于 (=) 或不等于 (<>) 比較時取值為 FALSE。當 SET ANSI_NULLS 為 ON 時,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 語句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 語句仍會返回零行。

          當 SET ANSI_NULLS 為 OFF 時,等于 (=) 和不等于 (<>) 比較運算符不遵從 SQL-92 標準。使用 WHERE column_name = NULL 的 SELECT 語句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 語句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語句返回所有不為 XYZ_value 也不為 NULL 的行。

          注意:
          SQL Server 是將空字符串解釋為單個空格還是解釋為真正的空字符串,由兼容級別設置控制。如果兼容級別小于或等于 65,則 SQL Server 會將空字符串解釋為單個空格。如果兼容級別等于 70,則 SQL Server 會將空字符串解釋為空字符串。有關設置兼容級別的詳細信息,請參閱 sp_dbcmptlevel (Transact-SQL)

           

           

          當 SET ANSI_NULLS 為 ON 時,所有對空值的比較均取值為 UNKNOWN。當 SET ANSI_NULLS 為 OFF 時,如果數據值為 NULL,則所有數據對空值的比較將取值為 TRUE。如果未指定 SET ANSI_NULLS,則應用當前數據庫的 ANSI_NULLS 選項設置。有關 ANSI_NULLS 數據庫選項的詳細信息,請參閱 ALTER DATABASE (Transact-SQL)設置數據庫選項

          僅當某個比較操作數是值為 NULL 的變量或文字 NULL 時,SET ANSI_NULLS ON 才會影響比較。如果比較雙方是列或復合表達式,則該設置不會影響比較。

          為使腳本按預期運行,不管 ANSI_NULLS 數據庫選項或 SET ANSI_NULLS 的設置如何,請在可能包含空值的比較中使用 IS NULL 和 IS NOT NULL。

          在執行分布式查詢時應將 SET ANSI_NULLS 設置為 ON。

          對計算列或索引視圖創建或更改索引時,SET ANSI_NULLS 也必須為 ON。如果 SET ANSI_NULLS 為 OFF,則針對表(包含計算列或索引視圖的索引)的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。SQL Server 將返回一個錯誤消息,該錯誤消息會列出所有違反所需值的 SET 選項。另外,在執行 SELECT 語句時,如果 SET ANSI_NULLS 為 OFF,則 SQL Server 將忽略計算列或視圖的索引值并解析選擇操作,就好像表或視圖沒有這樣的索引一樣。

          注意:
          ANSI_NULLS 是在處理計算列或索引視圖的索引時必須設置為所需值的七個 SET 選項之一。還必須將選項 ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、QUOTED_IDENTIFIER 和 CONCAT_NULL_YIELDS_NULL 設置為 ON,而必須將 NUMERIC_ROUNDABORT 設置為 OFF。

           

           

          SQL Server 的 SQL Native Client ODBC 驅動程序和 SQL Native Client OLE DB 訪問接口在連接時會自動將 ANSI_NULLS 設置為 ON。該設置可以在 ODBC 數據源、ODBC 連接屬性或 OLE DB 連接屬性(它們在連接到 SQL Server 實例之前在應用程序中設置)中進行配置。SET ANSI_NULLS 的默認值為 OFF。

          當 SET ANSI_DEFAULTS 為 ON 時,將啟用 SET ANSI_NULLS。

          SET ANSI_NULLS 的設置是在執行或運行時設置,而不是在分析時設置。



          SET QUOTED_IDENTIFIER

          使 SQL Server 2005 遵從關于引號分隔標識符和文字字符串的 SQL-92 規則。由雙引號分隔的標識符可以是 Transact-SQL 保留關鍵字,也可以包含 Transact-SQL 標識符語法約定通常不允許的字符。

          主題鏈接圖標 Transact-SQL 語法約定

          語法語法
          備注備注

          當 SET QUOTED_IDENTIFIER 為 ON 時,標識符可以由雙引號分隔,而文字必須由單引號分隔。當 SET QUOTED_IDENTIFIER 為 OFF 時,標識符不可加引號,且必須符合所有 Transact-SQL 標識符規則。有關詳細信息,請參閱標識符。文字可以由單引號或雙引號分隔。

          當 SET QUOTED_IDENTIFIER 為 ON(默認值)時,由雙引號分隔的所有字符串都被解釋為對象標識符。因此,加引號的標識符不必符合 Transact-SQL 標識符規則。它們可以是保留關鍵字,并且可以包含 Transact-SQL 標識符中通常不允許的字符。不能使用雙引號分隔文字字符串表達式,而必須用單引號括住文字字符串。如果單引號 (') 是文字字符串的一部分,則可以由兩個單引號 (") 表示。當對數據庫中的對象名使用保留關鍵字時,SET QUOTED_IDENTIFIER 必須為 ON。

          當 SET QUOTED_IDENTIFIER 為 OFF 時,表達式中的文字字符串可以由單引號或雙引號分隔。如果文字字符串由雙引號分隔,則可以在字符串中包含嵌入式單引號,如省略號。

          當在計算列或索引視圖上創建或更改索引時,SET QUOTED_IDENTIFIER 必須為 ON。如果 SET QUOTED_IDENTIFIER 為 OFF,則計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關計算列的索引視圖和索引所必需的 SET 選項設置的詳細信息,請參閱 SET (Transact-SQL) 中的“使用 SET 語句時的注意事項”。

          在進行連接時,SQL 本機客戶端 ODBC 驅動程序和 SQL Server 的 SQL Native Client OLE DB Provider 自動將 QUOTED_IDENTIFIER 設置為 ON。這可以在 ODBC 數據源、ODBC 連接特性或 OLE DB 連接屬性中進行配置。對來自 DB-Library 應用程序的連接,SET QUOTED_IDENTIFIER 默認設置為 OFF。

          創建表時,即使此時將 QUOTED IDENTIFIER 選項設置為 OFF,該選項在表的元數據中仍始終存儲為 ON。

          創建存儲過程時,將捕獲 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設置,并用于該存儲過程的后續調用。

          在存儲過程內執行 SET QUOTED_IDENTIFIER 時,其設置不更改。

          當 SET ANSI_DEFAULTS 為 ON時,將啟用 SET QUOTED_IDENTIFIER。

          SET QUOTED_IDENTIFIER 還與 ALTER DATABASE 的 QUOTED_IDENTIFER 設置相對應。有關數據庫設置的詳細信息,請參閱 ALTER DATABASE (Transact-SQL)設置數據庫選項

          SET QUOTED_IDENTIFIER 是在分析時進行設置的。在分析時進行設置意味著:SET 語句只要出現在批處理或存儲過程中即生效,與代碼執行實際上是否到達該點無關;并且 SET 語句在任何語句執行之前生效。

          posted on 2007-08-10 11:04 渠上月 閱讀(827) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
          主站蜘蛛池模板: 渝中区| 年辖:市辖区| 隆安县| 江孜县| 宁津县| 富民县| 怀来县| 阿城市| 湖北省| 巨野县| 济宁市| 肥东县| 沙田区| 浪卡子县| 惠东县| 弋阳县| 中牟县| 延长县| 原阳县| 游戏| 思茅市| 惠安县| 苗栗市| 什邡市| 和硕县| 肇源县| 通城县| 阳春市| 长寿区| 乌兰察布市| 上林县| 隆安县| 荥经县| 晋宁县| 宜川县| 柳州市| 太康县| 泰顺县| 安吉县| 兴安盟| 普兰店市|