Existe uma boa maneira de fazer algo como o seguinte?
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"
Como cada execução do sqlcmd é uma sessão separada, isso significa que você não pode ter transações abrangendo essas execuções. Você vai querer combinar seus scripts em um único script para fazer o que quiser.
Se você puder ordenar seus scripts corretamente, a seguinte abordagem no Powershell funcionará para você:
Essencialmente, eu leio cada script (supondo que eles estejam ordenados corretamente) em uma única variável de lote, acrescento um
BEGIN TRANSACTION
eEND TRANSACTION
ao lote e, em seguida, executo-o de volta como uma consulta na minha execução sqlcmd.