[英]Create/Amend multiple objects (within a sproc) with different QUOTED_IDENTIFIER values
作為開發輔助,我正在編寫一個存儲過程,該過程將數據庫對象從一個數據庫創建/修改到另一個數據庫。 (存儲過程采用 CSV 字符串 object 名稱,它使用 XML 將其拆分為單獨的值,因此需要為運行過程打開QUOTED_IDENTIFIER
。)
但是,正在創建/修改的對象包括可以打開或關閉QUOTED_IDENTIFIER
的存儲過程。
根據這個非常相似的問題的答案(專門討論創建單個存儲過程),如果您在另一個存儲過程中創建/修改存儲過程,它將始終使用“父”存儲過程中設置的QUOTED_IDENTIFIER
值。
有人知道在創建/修改多個存儲過程時能夠設置不同的QUOTED_IDENTIFIER
標志值的方法嗎?
我在循環中嘗試了非常簡單的代碼(如下所示),但正如上面的答案所暗示的,這對結果沒有影響,並且創建/修改的 sproc 總是將QUOTED_IDENTIFIER
設置為ON
...
IF @QUOTED = 1 -- from sys.sql_modules.uses_quoted_identifier
SET QUOTED_IDENTIFIER ON
ELSE
SET QUOTED_IDENTIFIER OFF
EXEC sp_executesql @DEFINITION -- from sys.sql_modules.definition
非常感謝@Jeroen ,他讓我找到了解決方案,即創建另一個開發輔助存儲過程,並將QUOTED_IDENTIFIER
設置為OFF
。
在主要開發輔助存儲區的主循環中,它通過自身(如果需要ON
)或通過輔助存儲區(如果需要OFF
)執行定義。
這是我現在工作的一個非常簡化的偽版本......
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE DEV_AID_SUB
@DEFINITION NVARCHAR(MAX)
AS
EXEC sp_executesql @DEFINITION
---
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE DEV_AID
AS
BEGIN
WHILE @LOOP = 1
IF @QUOTED = 1
EXEC sp_executesql @DEFINITION
ELSE
EXEC DEV_AID_SUB @DEFINITION
END
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.