Met*_*hor 7 sql-server transaction sqlcmd sql-server-2014
有没有什么好方法可以做以下事情?
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"
Run Code Online (Sandbox Code Playgroud)
Mik*_*Fal 10
因为每个 sqlcmd 执行都是一个单独的会话,这意味着您不能有跨越这些执行的事务。您将希望将您的脚本组合成一个脚本,以便您执行所需的操作。
如果您可以正确订购脚本,Powershell 中的以下方法将适用于您:
$scripts = Get-ChildItem "C:\temp\*.sql" |Sort-Object
$fullbatch = @()
$fullbatch += "BEGIN TRANSACTION;"
foreach($script in $scripts){
$fullbatch += Get-Content $script
}
$fullbatch += "COMMIT TRANSACTION;"
sqlcmd -S localhost -d test -Q "$fullbatch"
Run Code Online (Sandbox Code Playgroud)
本质上,我将每个脚本(假设它们的顺序正确)读入单个批处理变量,将BEGIN TRANSACTION
和附加END TRANSACTION
到批处理,然后在我的 sqlcmd 执行中将其作为查询执行。
归档时间: |
|
查看次数: |
5986 次 |
最近记录: |