簡體   English   中英

由於使用了XML / ANSI_NULLS,QUOTED_IDENTIFIER選項,SQL Server存儲過程失敗

[英]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等也是如此)。

BOL, CREATE PROC ,“使用SET選項”

創建或修改Transact-SQL存儲過程時,數據庫引擎會保存SET QUOTED_IDENTIFIERSET ANSI_NULLS的設置。 執行存儲過程時使用這些原始設置。 因此,存儲過程運行時,將忽略SET QUOTED_IDENTIFIERSET ANSI_NULLS任何客戶端會話設置。 創建或修改存儲過程時,不會保存其他SET選項,例如SET ARITHABORT,SET ANSI_WARNINGS或SET ANSI_PADDINGS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM