2017-07-27 133 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

不客氣。請標記爲已解決 –