Sql-Server
EXEC動態SQL的TSQL成功或失敗結果
基於以下程式碼:
/* 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 中(不知道我們能做到這一點):-(
BEGIN TRY EXEC dbo.createTmpFromQuery @SRC,@uniqueTMP,@createTmpStr=@SQLStr OUTPUT EXEC(@SQLStr) END TRY BEGIN CATCH SET @ErrorMessage='Error Creating '+@uniqueTMP+' table - verify query in @SRC' RAISERROR(@ErrorMessage,16,1) END CATCH
我測試了它,它有效。我希望這會幫助別人……