Gibt es eine gute Möglichkeit, Folgendes zu tun?
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"
sql-server
transaction
sql-server-2014
sqlcmd
Metapher
quelle
quelle
Antworten:
Da jede sqlcmd-Ausführung eine separate Sitzung ist, bedeutet dies, dass Sie keine Transaktionen über diese Ausführungen hinweg haben können. Sie möchten Ihre Skripte in einem einzigen Skript kombinieren, damit Sie tun können, was Sie wollen.
Wenn Sie Ihre Skripte ordnungsgemäß bestellen können, funktioniert der folgende Ansatz in Powershell für Sie:
Im Wesentlichen lese ich jedes Skript (vorausgesetzt, sie sind korrekt sortiert) in eine einzelne Stapelvariable ein, füge a
BEGIN TRANSACTION
undEND TRANSACTION
an den Stapel an und führe diese dann als Abfrage innerhalb meiner sqlcmd-Ausführung zurück.quelle