sqlcmd错误处理

sqlcmd error handling

我有一个基本的 select 查询,它强制将错误保存到名为 2 test fail.sql:

的 .sql 文件中
SELECT 1/0;
GO

我通过 sqlcmd 使用以下脚本调用它:

BEGIN TRY
    EXEC [master].[sys].[xp_cmdshell] 'sqlcmd -S . -i "G:\Release test test fail.sql "'
END TRY
BEGIN CATCH
 SELECT '1'
END CATCH

我希望它落入 CATCH,但它只是 select 结果的输出。我环顾四周,建议使用 -b 但这似乎对我不起作用,我们将不胜感激

我什至不确定这是否可能。 TRY/CATCH 捕获异常,但是 xp_cmdshell 不抛出异常,它只是在输出中显示错误。 您可以做一些变通办法,例如:

BEGIN TRY
        DECLARE @outputs AS TABLE (outp VARCHAR(MAX));
        DECLARE @result INT;
        INSERT INTO @outputs
        EXEC @result = [master].[sys].[xp_cmdshell] 'sqlcmd -b -S . -i "d:.txt"'
        IF  (   @result > 0)
        RAISERROR ('error',16,1)
    END TRY

    BEGIN CATCH
        IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;


        select * from @outputs
    END CATCH