2017-07-27 132 views
0

我有强制保存到.sql文件错误称为2测试fail.sql一个基本的选择查询:SQLCMD错误处理

SELECT 1/0; 
GO 

我用下面的脚本通过SQLCMD调用此:

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

我希望它落入CATCH中,但它只是选择输出结果。我环顾四周,-b被推荐,但这似乎并没有为我工作,任何帮助,将不胜感激

回答

0

我不知道这是甚至可能的。 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:\1.txt"' 
     IF ( @result > 0) 
     RAISERROR ('error',16,1) 
    END TRY 

    BEGIN CATCH 
     IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION; 


     select * from @outputs 
    END CATCH 
+0

这是完美的!非常感谢!! – Yen

+0

不客气。请标记为已解决 –