简体   繁体   中英

PowerShell: How to place “Write-Host” inside SQL code before “ROLLBACK TRANSACTION”

In below power-shell script, I'm executing multiple SQL statement. All SQL statements are in TRANSACTION. Now In case any error, the execution falls under BEGIN CATCH and all my transaction are ROLLBACK.

Now here I would like to add a message using "Write-Host" before or after ROLLBACK TRANSACTION .

[CmdletBinding()]
Param(
[string]$SQLServer='(local)'
)
# Database Update
Write-Host "Update Database" -ForegroundColor Green
& sqlcmd.exe -S $SQLServer -Q @"
USE [Test]
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO DBO.A1 (Name) VALUES ('test1')
INSERT INTO DBO.A2 (Name) VALUES ('test1')
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() as ErrorMessage;

ROLLBACK TRANSACTION

END CATCH
"@

Is this possible?

@"
USE [Test]
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO DBO.A1 (Name) VALUES ('test1')
INSERT INTO DBO.A2 (Name) VALUES ('test1')
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() as ErrorMessage;

ROLLBACK TRANSACTION
$(Write-Host 'blah')

END CATCH
"@

I tried like that,

 BEGIN CATCH SELECT ERROR_MESSAGE() as ErrorMessage; ROLLBACK TRANSACTION $($Result =1) END CATCH "@ if($Result =1) { Write-Host "Update Database FAIL" -ForegroundColor Green } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM