Sum*_*ati 3 c# mysql visual-studio-2012 sql-server-data-tools
如果我想让部署后脚本只运行一次脚本,有没有办法做到这一点?
我只想为我的数据库运行一次部署后脚本
您可以创建 2 个主要脚本文件:Script.PostDeployment.sql并Script.PreDeployment.sql为您要执行的每个脚本放置以下语句(请注意,所有GO语句都在这里很重要)。
:SETVAR ScriptNameId ".\PostScripts\PathToScript\ScriptNameHere"
GO
IF NOT EXISTS ( SELECT *
FROM dbo.ScriptsHistoryTableWithVeryNiceName
WHERE Script_Name_Id = '$(ScriptNameId)' AND database_name = DB_NAME())
BEGIN
BEGIN TRY
:r $(ScriptNameId)".SQL"
INSERT INTO dbo.ScriptsHistoryTableWithVeryNiceName
VALUES ('$(ScriptNameId)', DB_NAME(), SYSDATETIME());
END TRY
BEGIN CATCH
DECLARE @err VARCHAR(MAX) = ERROR_MESSAGE();
RAISERROR('One time script $(ScriptNameId).sql failed %s', 16, 1, @err);
END CATCH;
END;
GO
Run Code Online (Sandbox Code Playgroud)
和表 DDL
CREATE TABLE dbo.ScriptsHistoryTableWithVeryNiceName
(
ScriptNameId VARCHAR(255) NOT NULL
, DatabaseName sysname NOT NULL
, ExecutionTime DATETIME2(7) NOT NULL
);
GO
Run Code Online (Sandbox Code Playgroud)
重要提示:您不能GO在这些一次性脚本文件中包含语句。
我发现的最好方法是确保您的脚本可重新运行或幂等(对于长篇大论)。
所以,如果你想做一些事情,比如插入一行,首先检查它是否存在。
如果要设置参考数据或静态数据表,请使用合并语句。
如果要重建索引,请使用 sys.stats 检查上次重建的日期。
编辑
| 归档时间: |
|
| 查看次数: |
4521 次 |
| 最近记录: |