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
我有一个基本的 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