我制作了这个脚本来处理批量.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
结束
答案 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