2016-02-26 34 views
0
BEGIN TRY 
    BEGIN TRANSACTION 
SET ANSI_NULLS ON 
Go 

SET QUOTED_IDENTIFIER ON 
GO 
CREATE FUNCTION dbo.RerurnStaticValue 
(
@value nvarchar(10) 
) 
RETURNS varchar(max) 
AS 
    BEGIN 

     DECLARE 
     @ReturnValue nvarchar(10) 
     SET @ReturnValue = @value 
     RETURN @ReturnValue 
    END 
     COMMIT TRAN -- Transaction Success! 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRAN --RollBack in case of Error 
    select ERROR_MESSAGE() 
END CATCH 

我準備了很長的腳本,並嘗試在腳本執行交易這樣的情況下,是否會有我的腳本中的任何錯誤也不會影響我數據庫。但是我得到的錯誤創建函數必須是批處理執行事務時的唯一語句。無法使用與圍棋語句事務在SQL Server 2008中

請幫忙。

+0

'GO'不是一個SQL關鍵字,它只是SSMS中的一個批處理分隔符,所以它所做的就是將腳本拆分爲塊並分別處理它們。所以單個事務不能跨越多個批次。但從上述情況來看,爲什麼你不願意。你實際上沒有觸及任何數據...... – GarethD

+1

爲什麼你需要在這裏進行交易?你需要exec()一個'create function'字符串,它清楚地告訴你*創建函數必須是批處理中的唯一語句*。 ('GO'是一個特殊的關鍵字,僅用於SSMS等實用程序來指示批次的結束) –

回答

0

我覺得功能documentation是相當清楚的:

用戶定義函數不能用於執行修改 數據庫狀態的操作。

COMMIT/ROLLBACK絕對屬於這一類。

改爲使用存儲過程。

相關問題