使用cmdshell的TSQL如何捕获异常?

时间:2015-07-19 17:27:56

标签: sql sql-server tsql xp-cmdshell

我制作了这个脚本来处理批量.sql源文件以定义SP(作为迁移的一部分)。它工作正常,但我可以'捕获任何异常,当任何源文件错误并且无法创建sp时。我尝试使用try / catch,看起来像cmdshell并不关心结果,即使是这个文件的输出也不同于好的文件。你知道我怎么能抓到坏文件吗?

由于 中号

While @cc > @ccRun
Begin
set @ccRun = @ccRun + 1;
set @shellArg = (select 'sqlcmd -S '+ etc...+ @file....);
begin try
  EXEC xp_cmdshell @shellArg  -- to create sp
end try
begin catch                   -- try to catch bad files,??
  select 'Error_____ for ' + @file
end catch

结束

1 个答案:

答案 0 :(得分:1)

xp_cmdshell不是非常"尝试抓住友好"。您应该尝试检查返回值,如下所示。

WHILE @cc > @ccRun
BEGIN
    SET @ccRun = @ccRun + 1;
    SET @shellArg = (select 'sqlcmd -S '+ etc...+ @file....);

    DECLARE @returnValue INT

    EXEC @returnValue = xp_cmdshell @shellArg

    IF @returnValue <> 0 
    BEGIN
        SELECT 'Error_____ for ' + @file
    END

END