首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 預存程序中 SET ANSI_NULLS 自動變為 OFF 的原因分析

     編輯:程式設計綜合問答

現象描述

資料庫預存程序中的 SET ANSI_NULLS ON 突然全部變成 OFF,歷來未遇過此情況,尋求原因。

根本原因

根據 SQL Server 文件,建立或修改預存程序時,資料庫引擎會**保存**該時期的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設定。執行預存程序時,會使用這些**原始儲存的設定**,而忽略目前工作階段的設定。因此,若在建立/修改預存程序的工作階段中 ANSI_NULLS 為 OFF,則該預存程序會永久儲存為 OFF。

解決方案

  1. 確保在建立或修改預存程序的腳本開頭顯式宣告 SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON;。
  2. 使用 SSMS 產生腳本時,勾選「包含 SET 選項」以保留正確設定。
  3. 若預存程序邏輯依賴特定 SET 選項,請在程序開頭加入 SET 陳述式以保證正確性。

補充說明

其他 SET 選項(如 ARITHABORT、ANSI_WARNINGS、ANSI_PADDING)不會被儲存,執行時遵循目前工作階段設定。若需固定這些選項,亦須在程序內部顯式設定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved