SSDT Post Deployment Scripts

青春壹個敷衍的年華 提交于 2019-12-02 19:17:29

问题


I would like to ignore post deployment scripts after it has been deployed. How do you archive/remove a branch specific post deployment script after it has been deployed on production environment in SSDT? Are there any best practices around?


回答1:


What I used to do is to create log table and store all the executed scripts. This is the table structure:

CREATE TABLE dbo.publish_script_logs
(
    script_name_id VARCHAR(255) NOT NULL
  , database_name  VARCHAR(255) NOT NULL
  , execution_time DATETIME2(7) NOT NULL
);

Then we created following scripts folder structure:

one_time_scripts
  initial_data_insert.sql
  ...
  postscript_all_together.sql
  prescript_all_together.sql
  ...
Script.PostDeployment1.sql
Script.PreDeployment1.sql

where initial_data_insert.sql is your needed script that is supposed to be executed on environment just once and pre\postscript_all_together.sql are the scripts where all these scripts are collected together. Build = None must be set for all of these scripts. There is limitation - GO statement separator is not allowed in "one time scripts".

Now this is what will these 2 scripts will have inside for single script:

:SETVAR ScriptNameId ".\initial_data_insert"
GO
IF NOT EXISTS ( SELECT  *
                FROM    [dbo].[publish_script_logs]
                WHERE   [Script_Name_Id] = '$(ScriptNameId)' 
                AND [database_name] = DB_NAME()
                )
BEGIN
BEGIN TRY
    :r $(ScriptNameId)".SQL"
    INSERT  INTO [dbo].[publish_script_logs]
    VALUES  ( '$(ScriptNameId)', DB_NAME() ,GETDATE() );
END TRY
BEGIN CATCH
    DECLARE @err VARCHAR(MAX) = ERROR_MESSAGE();
    DECLARE @msg VARCHAR(MAX) = 'One time script $(ScriptNameId).sql failed ' + @err;
    RAISERROR (@msg, 16, 1);
END CATCH
END;
GO

And finally in the Script.PostDeployment1.sql and Script.PreDeployment1.sql files you'll have:

:r .\one_time_scripts\postscript_all_together.sql

and

:r .\one_time_scripts\prescript_all_together.sql



来源:https://stackoverflow.com/questions/57460337/ssdt-post-deployment-scripts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!