使用 sqlcmd 实用程序回滚数据库更改

rolling back datbabase changes with sqlcmd utility

我有一个发布管道,它应用 'SqlCmd.exe' 的数据库更改。 我正在尝试使用此命令行实用程序执行存储过程:

/opt/mssql-tools/bin/sqlcmd -S tcp:$(Server) -d $(Database) -U $(UserName) -P '$(Password)' -b -i "$(ScriptFile)"

一旦脚本文件出现问题,我想SQLCMD.EXE自动回滚所有更改。

我应该提到脚本文件中没有 TRANSACTIONS 管理。

请帮助我了解如何解决此问题。

您可能必须在脚本文件中添加回滚事务。 azure 发布管道中没有配置来控制回滚行为。请参阅 example here 在脚本中添加交易。

如果您不想在脚本文件中添加交易。您可以尝试在脚本下方的发布管道 运行 中添加一个 poweshell 任务,以将 BEGIN TRANSACTIONEND TRANSACTION 附加到您的查询内容中。

$fullbatch = @()
$fullbatch += "BEGIN TRANSACTION;"

$fullbatch += Get-Content $(ScriptFile)
 
$fullbatch += "COMMIT TRANSACTION;"

sqlcmd -S tcp:$(Server) -d $(Database) -U $(UserName) -P '$(Password)' -b -Q "$fullbatch"

参见 this thread 中的示例。