基于以下代码:
/* This SP takes a query and a unique temporary table name as input...
The outputs is a string with the command to create the tmp table based on the query that is given in the @SRC parameter
*/
EXEC dbo.createTmpFromQuery @SRC,@uniqueTMP,@createTmpStr=@SQLStr OUTPUT
/* This executed the query that will create the tmp table and insert the data from @SRC */
EXEC(@SQLStr)
调用这 2 行(以及许多其他行)的整个存储过程位于 Try Catch 中。我刚刚遇到了一个问题,@SRC 中的查询有一个语法错误,称为 Catch 部分:
BEGIN CATCH
ROLLBACK TRANSACTION;
SET @ERRORMESSAGE=CASE WHEN @ERRORMESSAGE='' THEN ERROR_MESSAGE() ELSE @ERRORMESSAGE END
RAISERROR (@ERRORMESSAGE,16,1)
END CATCH
Try 有很多验证,我在大多数情况下将 @ErrorMessage 设置为个性化消息。在这种情况下,我想设置个性化消息而不是获取标准错误消息
(example): Incorrect syntax near 'FROM'.
我试图弄清楚如何让 EXEC(@SqlStr) 返回成功或失败代码,因此我可以在 @ErrorMessage 进入代码的捕获部分之前设置它。
我找到了解决方案......我将语句包装在另一个 try catch 中的大 try catch 中(不知道我们能做到这一点):-(
我测试了它,它有效。我希望这会帮助别人......