SQL with cmd shell 我如何捕获异常?

TSQL with cmdshell how I can catch exception?

我制作了这个脚本来处理批处理 .sql 源文件来定义 SP(作为迁移的一部分)。它工作正常但我无法捕获任何异常,当任何源文件错误并且无法创建给定的 sp 时。我尝试使用 try/catch 并且看起来 cmdshell 不关心结果,甚至这个文件的输出与好的文件不同。你知道我还能用什么方法捕捉坏文件吗??

谢谢 M

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

结束

xp_cmdshell 不是很 "try-catch friendly"。您应该尝试检查 return 值,如下所示。

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