(4.43)sql server中的set


轉自官網:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-statements-transact-sql?view=sql-server-ver15

Transact-SQL 編程語言提供了一些 SET 語句,這些語句可以更改特定信息的當前會話處理。 SET 語句可分為下表中列出的幾個類別。

有關使用 SET 語句設置局部變量的信息,請參閱 SET @local_variable (Transact-SQL)

使用 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 語句的示例將為 SET ANSI_DEFAULTS。

    • 使用批處理時,數據庫上下文由使用 USE 語句建立的批處理決定。 在存儲過程的外部運行的以及批處理中的計划外查詢和所有其他語句,將繼承通過 USE 語句建立的數據庫和連接的選項設置。

    • 多個活動的結果集 (MARS) 請求共享一個全局狀態,該狀態包含最新會話 SET 選項設置。 每個請求執行時都可以修改 SET 選項。更改特定於設置這些更改所在的請求上下文,不影響其他並發 MARS 請求。 但是,請求執行完成后,新的 SET 選項會被復制到全局會話狀態。 在此更改之后,同一會話中執行的新請求將使用這些新的 SET 選項設置。

    • 當從批處理或其他存儲過程運行某個存儲過程時,運行該存儲過程時使用的選項值,就是在包含該存儲過程的數據庫中設置的選項值。 例如,存儲過程 db1.dbo.sp1 調用存儲過程 db2.dbo.sp2 時,執行存儲過程 sp1 時將使用數據庫 db1 的當前兼容級別設置,執行存儲過程 sp2 時將使用數據庫 db2 的當前兼容級別設置 。

    • 如果 Transact-SQL 語句關注的對象駐留在多個數據庫中,則將對該語句應用當前數據庫上下文和當前連接上下文。 在這種情況下,如果 Transact-SQL 語句在批處理中,則當前連接上下文是 USE 語句定義的數據庫;如果 Transact-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,它為當前客戶端會話啟用結果集緩存功能。 如果已在數據庫級別將 Result_set_caching 設置為 OFF,就無法為會話將它設置為 ON。 如果 SET RESULT_SET_CACHING 設置為 OFF,它為當前客戶端會話禁用結果集緩存功能。 必須有公共角色的成員身份,才能更改此設置。 適用對象:Azure SQL 數據倉庫 Gen2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM