簡體   English   中英

創建/修改具有不同 QUOTED_IDENTIFIER 值的多個對象(在存儲過程中)

[英]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.

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