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