有没有像下面这样的好方法?
SQLCMD -S %SERVER% -E -Q "BEGIN TRANSACTION"
FOR %%f in (script1 script2 script3) do (
SET CURRENT_SCRIPT=%%f
SQLCMD -S Localhost -E -b -V 1 -i %%f.sql -o %%f.log
IF !ERRORLEVEL! NEQ 0 GOTO ERROR
SET CURRENT_SCRIPT=
)
SQLCMD -S %SERVER% -E -Q "COMMIT TRANSACTION"
因为每个 sqlcmd 执行都是一个单独的会话,这意味着您不能有跨越这些执行的事务。您将希望将您的脚本组合成一个脚本,以便您做您想做的事情。
如果您可以正确订购脚本,Powershell 中的以下方法将适合您:
本质上,我将每个脚本(假设它们的顺序正确)读入单个批处理变量,将 a
BEGIN TRANSACTION
和附加END TRANSACTION
到批处理,然后在我的 sqlcmd 执行中将其作为查询执行。