SET 陳述式 (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
Transact-SQL 程式設計語言提供了許多 SET 陳述式,供您變更目前工作階段對於特定資訊的處理。 這些 SET 陳述式可分組成下表所顯示的類別目錄。
如需有關使用 SET 陳述式來設定區域變數的詳細資訊,請參閱 SET @local_variable (Transact-SQL)。
類別 | 陳述式 |
---|---|
日期和時間陳述式 | SET DATEFIRST SET DATEFORMAT |
鎖定陳述式 | SET DEADLOCK_PRIORITY SET LOCK_TIMEOUT |
其他陳述式 | SET CONCAT_NULL_YIELDS_NULL SET CURSOR_CLOSE_ON_COMMIT SET FIPS_FLAGGER SET IDENTITY_INSERT SET LANGUAGE SET OFFSETS SET QUOTED_IDENTIFIER |
查詢執行陳述式 | SET ARITHABORT SET ARITHIGNORE SET FMTONLY 注意:這項功能將會在未來的 SQL Server 版本中移除。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 SET NOCOUNT SET NOEXEC SET NUMERIC_ROUNDABORT SET PARSEONLY SET QUERY_GOVERNOR_COST_LIMIT SET RESULT SET CACHING (預覽) 注意:此功能僅適用於 Azure Synapse Analytics。 SET ROWCOUNT SET TEXTSIZE |
ISO 設定陳述式 | SET ANSI_DEFAULTS SET ANSI_NULL_DFLT_OFF SET ANSI_NULL_DFLT_ON SET ANSI_NULLS SET ANSI_PADDING SET ANSI_WARNINGS |
統計資料陳述式 | SET FORCEPLAN SET SHOWPLAN_ALL SET SHOWPLAN_TEXT SET SHOWPLAN_XML SET STATISTICS IO SET STATISTICS XML SET STATISTICS PROFILE SET STATISTICS TIME |
交易陳述式 | SET IMPLICIT_TRANSACTIONS SET REMOTE_PROC_TRANSACTIONS SET TRANSACTION ISOLATION LEVEL SET XACT_ABORT |
SET 陳述式的使用考量
所有 SET 陳述式都是在執行階段執行,但以下陳述式除外,這些陳述式是在剖析階段執行:
- SET FIPS_FLAGGER
- SET OFFSETS
- SET PARSEONLY
- 和 SET QUOTED_IDENTIFIER
如果在預存程序或觸發程序中執行 SET 陳述式,則在預存程序或觸發程序傳回控制權之後,就會還原 SET 選項的值。 另外,如果您在使用 sp_executesql 或 EXECUTE 來執行的動態 SQL 字串中指定 SET 陳述式,從動態 SQL 字串所指定的批次傳回控制權之後,也會還原 SET 選項的值。
預存程序是利用執行階段所指定的 SET 設定 (除了 SET ANSI_NULLS 和 SET QUOTED_IDENTIFIER) 來執行的。 指定 SET ANSI_NULLS 或 SET QUOTED_IDENTIFIER 的預存程序會使用建立預存程序時所指定的設定。 如果用於預存程序內,任何 SET 設定都會被忽略。
sp_configure 的 user options 設定允許伺服器範圍的設定,並可跨多個資料庫運作。 除了出現在登入階段之外,這項設定的行為也如同明確的 SET 陳述式。
利用 ALTER DATABASE 來設定的資料庫設定,只在資料庫層級才有效,且只在明確設定時才有效。 資料庫設定會覆寫使用 sp_configure 所設定的執行個體選項設定。
如果 SET 陳述式使用 ON 和 OFF,您可以指定多個 SET 選項中的任一個。
注意
這並不適用於與統計資料相關的 SET 選項。
例如,
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
會將 QUOTED_IDENTIFIER 和 ANSI_NULLS 都設為 ON。SET 陳述式設定會覆寫使用 ALTER DATABASE 所設定的相同資料庫選項設定。 例如,SET ANSI_NULLS 陳述式所指定的值會覆寫 ANSI_NULL 的資料庫設定。 另外,當使用者根據先前使用 sp_configure user options 設定而生效之值或所有 ODBC 和 OLE/DB 連線所套用的值,來連線到資料庫時,部分連線設定會自動設成 ON。
ALTER、CREATE 和 DROP DATABASE 陳述式不接受 SET LOCK_TIMEOUT 設定。
當全域或捷徑 SET 陳述式設定多項設定時,發出捷徑 SET 陳述式會重設捷徑 SET 陳述式影響所及的所有選項先前設定。 如果在發出捷徑 SET 陳述式之後,才明確設定捷徑 SET 陳述式影響所及的 SET 選項,則這個個別 SET 陳述式會覆寫可比較的捷徑設定。 SET ANSI_DEFAULTS 是捷徑 SET 陳述式的範例。
當使用批次時,資料庫內容取決於利用 USE 陳述式建立的批次。 在預存程序之外執行以及在批次中的非計劃性查詢和所有其他陳述式,都繼承 USE 陳述式所建立之資料庫和連線的選項設定。
Multiple Active Result Set (MARS) 要求會共用包含最新工作階段 SET 選項設定的全域狀態。 在執行各項要求時,它都能夠修改 SET 選項。 變更專屬於設定它們的要求內容,不會影響其他並行 MARS 要求。 不過,在要求執行完成之後,會將新的 SET 選項複製到全域工作階段狀態中。 在這項變更之後,相同工作階段所執行的新要求會使用這些新的 SET 選項設定。
從批次或從另一個預存程序執行預存程序時,都會利用這個預存程序所在資料庫中所設定的選項值來執行。 例如,當 db1.dbo.sp1 預存程序呼叫 db2.dbo.sp2 預存程序時,會使用 db1 資料庫目前的相容性層級設定來執行 sp1 預存程序,並使用 db2 資料庫目前的相容性層級設定來執行 sp2 預存程序。
當 Transact-SQL 陳述式涉及多個資料庫中的物件時,這個陳述式會套用目前資料庫內容及目前連線內容。 在這個情況下,如果 Transact-SQL 陳述式是在批次中,目前的連接內容就是 USE 陳述式所定義的資料庫;如果 T-SQL 陳述式是在預存程序中,連接內容就是預存程序所在的資料庫。
當您建立和操作計算資料行索引或索引檢視表時,必須將下列 SET 選項設成 ON:ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNINGS。 將 NUMERIC_ROUNDABORT 選項設成 OFF。
如果您未將任何這些選項設成所需要的值,則在索引檢視表或含計算資料行索引的資料表上執行 INSERT、UPDATE、DELETE、DBCC CHECKDB 和 DBCC CHECKTABLE 動作都會失敗。 SQL Server 會產生一個錯誤,列出所有設定不正確的選項。 另外,SQL Server 也會依照計算資料行或檢視不存在索引的方式,來處理這些資料表或索引檢視表的 SELECT 陳述式。
當 SET RESULT_SET_CACHING 為 ON 時,它會為目前的用戶端工作階段啟用結果快取功能。 若在資料庫層級關閉 (OFF) Result_set_caching,便無法為工作階段開啟 (ON) 此功能。 當 SET RESULT_SET_CACHING 為關閉 (OFF) 時,便會為目前的用戶端工作階段停用結果集快取功能。 變更此設定需要 public 角色中的成員資格。 適用於:Azure Synapse Analytics Gen2