![](/img/trans.png)
[英]SQL SERVER and SET ANSI_NULLS ON, SET QUOTED_IDENTIFIER ON
[英]SQL Server Stored Procedure Fails due to use of XML/ ANSI_NULLS, QUOTED_IDENTIFIER options
我有一個存儲過程,它接受XML參數並將數據插入到多個表中。 如果我使用SSMS查詢窗口將存儲過程運行到數據庫中,一切正常。 但是,我們有一個自定義安裝程序,用於將存儲過程部署到數據庫,當使用它時,sp的執行失敗並顯示以下錯誤:
INSERT failed because the following SET options have incorrect settings:
'ANSI_NULLS, QUOTED_IDENTIFIER'. Verify that SET options are correct for use with
indexed views and/or indexes on computed columns and/or query notifications
and/or xml data type methods.
在存儲過程中編寫腳本時,自定義安裝程序不使用正確的設置。
在sp中設置這些(SET ARITHABORT ON; SET QUOTED_IDENTIFIER ON; SET ANSI_NULLS ON;)無效:
在調用代碼中的sp之前,我還嘗試為open連接設置這些選項。 這再次沒有達到預期的效果。
在sp運行到數據庫時 ,與數據庫連接的設置似乎很重要, 而不是使用sp時的設置。
我已經通過在SSMS選項中使用這些設置進行了實驗,這似乎就是這種情況。 我希望有人確認這是絕對的情況 (如果有一種方法我會喜歡聽到它,但我沒有希望)
不幸的是,改變安裝程序目前不是我的選擇,所以我期待不得不回滾幾周的工作; 所以,如果我必須這樣做,我想確定(並有一些證據支持我),這是唯一的選擇
在CREATE或ALTER時應用的設置在運行時被忽略。
默認情況下,SSMS具有正確的設置(sqlcmd,osql等也是如此)。
創建或修改Transact-SQL存儲過程時,數據庫引擎會保存
SET QUOTED_IDENTIFIER
和SET ANSI_NULLS
的設置。 執行存儲過程時使用這些原始設置。 因此,存儲過程運行時,將忽略SET QUOTED_IDENTIFIER
和SET ANSI_NULLS
任何客戶端會話設置。 創建或修改存儲過程時,不會保存其他SET選項,例如SET ARITHABORT,SET ANSI_WARNINGS或SETANSI_PADDINGS
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.