Sql-Server-2016

執行 SQL Server 腳本並自動辨識和提示腳本變數的工具

  • February 26, 2021

我有一個包含多個對象和作業的腳本文件夾,每次部署新的 SQL Server 實例時我都會推出這些對象和作業。這些腳本使用腳本變數,例如,這裡是一個作業創建腳本的簡化範例:

DECLARE @Owner SYSNAME = (SELECT [name] FROM sys.server_principals WHERE [sid] = 0x01)

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'Myjob', 
       @enabled=1, 
       @notify_level_eventlog=0, 
       @notify_level_email=2, 
       @notify_level_netsend=0, 
       @notify_level_page=0, 
       @delete_level=0, 
       @description=N'blah', 
       @category_name=N'Database Maintenance', 
       @owner_login_name=@Owner, 
       @notify_email_operator_name=N'$(AlertOperator)', @job_id = @jobId OUTPUT

請注意,@notify_email_operator_name將設置為傳遞給的任何值$(AlertOperator)

這些腳本通常通過一個 Powershell 腳本執行,該腳本循環遍歷文件夾並將值傳遞給$(AlertOperator)變數。

這種方法允許保留一套腳本,可以輕鬆地將其推廣到新伺服器。

我想知道是否有一個 GUI 工具可以打開一個或多個 .sql 文件,它會自動辨識這些文件中的腳本變數並在針對一個或多個定義的伺服器執行文件之前提示它們的值?

SSMS 的這個功能幾乎可以做到我想要的,唯一的問題是參數必須是<parameter_name, data_type, default_value>格式而不是$(variableName)使其與目前的 Powershell 設置不兼容。它的另一個問題(我可以忍受)是它實際上只進行查找和替換,而不是執行腳本。我可以忍受,但$()不幸的是,不支持會破壞交易

我認為您需要做的就是在 SQL Server Management Studio 中將腳本設置為模板,然後使用替換模板參數功能 - 請參閱

https://docs.microsoft.com/en-us/sql/ssms/template/template-explorer?view=sql-server-ver15

我不確定它將為您的特定問題提供多大程度的靈活性,但我已經看到dbatools推薦用於類似的事情。我個人還沒有機會嘗試它們,但計劃在我有時間的時候嘗試。它的目標是簡化常見的重複性任務,例如跨多個伺服器的部署並以某種方式與 Powershell 集成,因此可能值得一試。

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