Transact-SQL 程序設(shè)計語言提供了一些 SET 語句,這些語句可以更改特定信息的當(dāng)前會話處理。
SET 語句可分為以下幾類:
分類 |
更改以下各項的當(dāng)前會話設(shè)置 |
---|
日期和時間 |
處理日期和時間數(shù)據(jù)。 |
鎖定 |
處理 Microsoft® SQL Server™ 鎖定。 |
雜項 |
SQL Server 的雜項功能。 |
查詢執(zhí)行 |
執(zhí)行和處理查詢。 |
SQL-92 設(shè)置 |
使用 SQL-92 默認設(shè)置。 |
統(tǒng)計信息 |
顯示統(tǒng)計信息。 |
事務(wù) |
處理 SQL Server 事務(wù)。 |
日期和時間語句
SET DATEFIRST
SET DATEFORMAT
鎖定語句
SET DEADLOCK_PRIORITY
SET LOCK_TIMEOUT
雜項語句
SET CONCAT_NULL_YIELDS_NULL
SET CURSOR_CLOSE_ON_COMMIT
SET DISABLE_DEF_CNST_CHK
SET FIPS_FLAGGER
SET IDENTITY_INSERT
SET LANGUAGE
SET OFFSETS
SET QUOTED_IDENTIFIER
查詢執(zhí)行語句
SET ARITHABORT
SET ARITHIGNORE
SET FMTONLY
SET NOCOUNT
SET NOEXEC
SET NUMERIC_ROUNDABORT
SET PARSEONLY
SET QUERY_GOVERNOR_COST_LIMIT
SET ROWCOUNT
SET TEXTSIZE
SQL-92 設(shè)置語句
SET ANSI_DEFAULTS
SET ANSI_NULL_DFLT_OFF
SET ANSI_NULL_DFLT_ON
SET ANSI_NULLS
SET ANSI_PADDING
SET ANSI_WARNINGS
統(tǒng)計語句
SET FORCEPLAN
SET SHOWPLAN_ALL
SET SHOWPLAN_TEXT
SET STATISTICS IO
SET STATISTICS PROFILE
SET STATISTICS TIME
事務(wù)語句
SET IMPLICIT_TRANSACTIONS
SET REMOTE_PROC_TRANSACTIONS
SET TRANSACTION ISOLATION LEVEL
SET XACT_ABORT
使用 SET 語句時的注意事項
- 除 SET FIPS_FLAGGER、SET OFFSETS、SET PARSEONLY 和 SET QUOTED_IDENTIFIER 外,所有其它 SET 語句均在執(zhí)行或運行時設(shè)置。SET FIPS_FLAGGER、SET OFFSETS、SET PARSEONLY 和 SET QUOTED_IDENTIFIER 語句在分析時設(shè)置。
- 如果在存儲過程中設(shè)置 SET 語句,則從存儲過程返回控制后將還原 SET 選項的值。因此,在動態(tài) SQL 中指定的 SET 語句不影響動態(tài) SQL 語句之后的語句。
- 存儲過程與在執(zhí)行時指定的 SET 設(shè)置一起執(zhí)行,但 SET ANSI_NULLS 和 SET QUOTED_IDENTIFIER 除外。指定 SET ANSI_NULLS 或 SET QUOTED_IDENTIFIER 的存儲過程使用在存儲過程創(chuàng)建時指定的設(shè)置。如果在存儲過程內(nèi)使用任何 SET 設(shè)置,則都將忽略該設(shè)置。
- sp_configure 的 user options 設(shè)置允許服務(wù)器范圍的設(shè)置,并可以跨多個數(shù)據(jù)庫運行。該設(shè)置的行為還類似于顯式 SET 語句,在登錄時出現(xiàn)該設(shè)置的情況除外。
- 數(shù)據(jù)庫設(shè)置(使用 sp_dboption 設(shè)置的)僅在數(shù)據(jù)庫級上有效,并且只有在未顯式設(shè)置的情況下才生效。數(shù)據(jù)庫設(shè)置替代服務(wù)器選項設(shè)置(使用 sp_configure 設(shè)置)。
- 對于任何帶 ON 和 OFF 設(shè)置的 SET 語句,可以為多個 SET 選項指定 ON 或 OFF 設(shè)置。例如:
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
將 QUOTED_IDENTIFIER 和 ANSI_NULLS 均設(shè)置為 ON。
- SET 語句設(shè)置將替代數(shù)據(jù)庫選項設(shè)置(使用 sp_dboption 設(shè)置的)。另外,如果用戶在連接到數(shù)據(jù)庫時所基于的值是由于先前使用 sp_configure user options 設(shè)置而生效的,或者所基于的值適用于所有 ODBC 和 OLE/DB 連接,則一些連接設(shè)置將自動設(shè)置為 ON。
- 當(dāng)全局或快捷 SET 語句(如 SET ANSI_DEFAULTS)設(shè)置多個設(shè)置時,發(fā)出快捷 SET 語句將為所有受快捷 SET 語句影響的選項重置先前的設(shè)置。如果在發(fā)出快捷 SET 語句后顯式設(shè)置受快捷 SET 語句影響的個別 SET 選項,則個別 SET 語句將替代相應(yīng)的快捷設(shè)置。
- 當(dāng)使用批處理時,數(shù)據(jù)庫上下文由使用 USE 語句建立的批處理決定。在存儲過程的外部執(zhí)行的以及批處理中的特殊查詢和所有其它語句,繼承使用 USE 語句建立的數(shù)據(jù)庫和連接的選項設(shè)置。
- 當(dāng)從批處理或另一個存儲過程執(zhí)行某個存儲過程時,該存儲過程將根據(jù)所在的數(shù)據(jù)庫中當(dāng)前設(shè)置的選項值執(zhí)行。例如,當(dāng)存儲過程 db1.dbo.sp1 調(diào)用存儲過程 db2.dbo.sp2 時,存儲過程 sp1 根據(jù)數(shù)據(jù)庫 db1 的當(dāng)前兼容級別設(shè)置去執(zhí)行,存儲過程 sp2 根據(jù)數(shù)據(jù)庫 db2 的當(dāng)前兼容級別設(shè)置去執(zhí)行。
- 當(dāng) Transact-SQL 語句引用駐留在多個數(shù)據(jù)庫中的對象時,當(dāng)前數(shù)據(jù)庫上下文和當(dāng)前連接上下文(如果位于批處理中,則是由 USE 語句定義的數(shù)據(jù)庫;如果位于存儲過程中,則是包含該存儲過程的數(shù)據(jù)庫)將應(yīng)用于該語句。
- 當(dāng)在計算列或索引視圖上創(chuàng)建和操作索引時,必須將 SET 選項 ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNINGS 設(shè)置為 ON。必須將選項 NUMERIC_ROUNDABORT 設(shè)置為 OFF。
如果這些選項中的任何一個沒有設(shè)置為所要求的值,則在索引視圖上或在計算列帶索引的表上進行的 INSERT、UPDATE 和 DELETE 操作將失敗。SQL Server 將發(fā)出一個錯誤,列出所有設(shè)置不正確的選項。同時,SQL Server 將在這些表或索引視圖上處理 SELECT 語句,仿佛計算列或視圖上不存在索引一樣。