代码之家  ›  专栏  ›  技术社区  ›  user584018

PowerShell:如何在“回滚事务”之前将“Write Host”放入SQL代码中

  •  0
  • user584018  · 技术社区  · 6 年前

    在下面的powershell脚本中,我正在执行多个SQL语句。所有SQL语句都在事务中。现在,如果出现任何错误,执行将属于BEGIN CATCH,我的所有事务都将回滚。

    现在我想在这里添加一条消息,在前面或后面使用“Write Host” 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
    "@
    

    这可能吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jaqueline Vanek    6 年前
    @"
    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
    "@
    
        2
  •  0
  •   user584018    6 年前

    我试过了,

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