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