Sql-Server

是否有可能有一個雙引號視圖或過程的腳本

  • May 10, 2017

我顯然無法弄清楚Google搜尋我想要的關鍵詞,所以我需要幫助找出如何做到這一點。我覺得這可能是重複的,但我在其他任何地方都找不到。

我希望能夠輕鬆地將一堆創建表/視圖/proc 腳本保存到文件中。該文件具有易於執行的格式,可以刪除然後重新創建所有對象,因此它可以在多個數據庫上執行。

這種格式對我很有效,因為我必須在開發過程中對某些對象進行更改,然後在多個其他數據庫上進行相同的更改。我可以更改數據庫並點擊執行。

但是,有些腳本中有很多引號,每次我對文件進行更改或添加新對象時,都必須雙引號/四引號引用它們,這很煩人。例如…

IF NOT EXISTS (SELECT * FROM sys.views WHERE NAME = 'MF1' AND schema_id = (SELECT schema_id FROM sys.schemas WHERE NAME = 'CFConversion'))
BEGIN

EXEC('CREATE VIEW [CFConversion].[MF1]
AS
...
...
...
CROSS APPLY (
VALUES (''T'', ''FIT', FIT, '''')
     ,(''T'', ''SIT', SIT, '''')
     ,(''T'', ''FUTA', FUTA, '''')
     ,(''T'', ''Employee_SUI'', EMPLOYEE_SUI, '''')
     ,(''T'', ''Employee_SDI'', EMPLOYEE_SDI, '''')
...
...
...

交叉應用中有大量的值,它只是變得煩人。如何輕鬆導出對象的定義以具有雙引號/四引號?

在 SSMS 中,您可以在工具/選項/SQL Server 對象資源管理器/腳本/對像腳本選項中選中“檢查對像是否存在”選項。

然後,當您從對象資源管理器中為 CREATE 編寫腳本時,SSMS 會將對象編寫為 sp_executesql 語句,完全雙引號。

如果這對其他人有幫助,使用雙單引號來表示字元串中的單引號的另一種方法是CHAR(39). 這句話很難理解,舉個例子:

'Don''t'

可以使用這種方法表示為

'Don' + CHAR(39) + 't'

雖然這對於快速字元串可能看起來不那麼漂亮,但它可以解決大塊 DSQL 的問題。為了進一步清理它,我還建議您使用變數屏蔽特殊字元,例如:

DECLARE @tick CHAR(1) = CHAR(39)
SELECT 'Don' + @tick + 't code with DSQL'

在我想要保持清潔的腳本中,我經常使用製表CHAR(9)符和換行符 (crlf) 字元來使用這種方法CHAR(13) + CHAR(10)

引用自:https://dba.stackexchange.com/questions/173164