2010-06-01 83 views
0

下面的代碼工作就像一個魅力:問題有關Transact SQL語法

BEGIN TRY 
    BEGIN TRANSACTION 

    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK; 

    DECLARE @ErrorMessage NVARCHAR(4000), 
      @ErrorSeverity int; 
    SELECT @ErrorMessage = ERROR_MESSAGE(), 
      @ErrorSeverity = ERROR_SEVERITY();  
    RAISERROR(@ErrorMessage, @ErrorSeverity, 1); 
END CATCH 

但這代碼給出了一個錯誤:

BEGIN TRY 
    BEGIN TRANSACTION 

    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK; 

    RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1); 
END CATCH 

爲什麼?

+0

什麼錯誤? .... – 2010-06-01 02:31:53

+0

什麼是錯誤? – RobS 2010-06-01 02:32:14

回答

3

RAISERROR()無法將呼叫作爲其參數。需要是常數或變量。

+0

在我看來,這是一個非常煩人的「特徵」。 – 2010-06-01 12:13:42

0

+1 RAISERROR語句通過從sys.messages目錄視圖中檢索消息或在運行時構造消息字符串來生成錯誤消息。所以同意@Mitch小麥的同伴,我會遵循他的建議。