使用 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 TRANSACTION
和 END 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 中的示例。
我有一个发布管道,它应用 '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 TRANSACTION
和 END 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 中的示例。