2015-10-14 57 views
2

我有一個存儲過程。插入後,它應該返回一個值:如果插入成功,則返回1,否則返回0。插入存儲過程後返回,如果成功返回1 else else返回0

例如:

ALTER PROCEDURE [dbo].[sp_save_transaction] 
    -- Parameter 
    @SourceCode nvarchar(255), 
    @DepositorName nvarchar(255), 
    @TransactionDate date 
AS 
    SET XACT_ABORT ON 

    --BEGIN TRAN 
    DECLARE @PaymentDate date 
    DECLARE @PaymentDepositorName nvarchar(255) 
    DECLARE @PaymentNationId int 

    SET @PaymentDate = @TransactionDate 
    SET @PaymentDepositorName = @DepositorName 
    SET @PaymentNationId = (SELECT [NAT_SYS_ID] 
          FROM [MB_TB_NATION] 
          WHERE [NAT_CODE] = @DepositorCountry) 

    INSERT INTO [dbo].[MB_TB_TRANSACTION] 
      ([TRA_PAYMENT_DATE], [TRA_PAYMENT_DEPOSITOR_NAME], [TRA_PAYMENT_NATION_ID]) 
    VALUES (@PaymentDate, @PaymentDepositorName, @PaymentNationId,) 

謝謝您的幫助!

+0

使用的輸出參數。 –

+1

注意事項:你不應該爲你的存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

回答

1

您可以通過檢查「@@ ERROR」屬性來實現此目的。

https://msdn.microsoft.com/en-us/library/ms188790.aspx

線沿線的東西:

IF @@ERROR <> 0 
    BEGIN 
     RETURN 0; 
    END 
ELSE 
    BEGIN    
     RETURN 1; 
    END; 

不過我會考慮使用「0」爲您的成功價值,和其他任何爲錯誤。然後您可以使用不同的值來表示不同的錯誤狀態。除非你直接將結果映射到布爾「成功」值。

1

有兩種可能的解決方案:第一種是基於輸出參數的,當您運行它時,參數被賦值爲期望值。 其他解決方案只是返回所需的結果,正如您所問。 他們都會檢查@@ ERROR以確定最後的操作是否成功。

溶液A:

ALTER PROCEDURE [dbo].[sp_save_transaction] 
    -- Parameter 
    @SourceCode nvarchar(255), 
    @DepositorName nvarchar(255),`enter code here` 
    @TransactionDate date, 
    @result int output 
AS 
SET XACT_ABORT ON 

--BEGIN TRAN 
DECLARE @PaymentDate date 
DECLARE @PaymentDepositorName nvarchar(255) 
DECLARE @PaymentNationId int 

SET @PaymentDate = @TransactionDate 
SET @PaymentDepositorName = @DepositorName 
SET @PaymentNationId = (SELECT [NAT_SYS_ID] FROM [MB_TB_NATION] WHERE [NAT_CODE] = @DepositorCountry) 

INSERT INTO [dbo].[MB_TB_TRANSACTION] 
      ([TRA_PAYMENT_DATE] 
      ,[TRA_PAYMENT_DEPOSITOR_NAME] 
      ,[TRA_PAYMENT_NATION_ID] 
      ) 
    VALUES 
      (
      @PaymentDate, 
      @PaymentDepositorName, 
      @PaymentNationId, 
      ) 
    IF @@ERROR = 0 
    SET @result = 1 
    ELSE SET @result = 0 

溶液B:

ALTER PROCEDURE [dbo].[sp_save_transaction] 
    -- Parameter 
    @SourceCode nvarchar(255), 
    @DepositorName nvarchar(255),`enter code here` 
    @TransactionDate date 
AS 
SET XACT_ABORT ON 

--BEGIN TRAN 
DECLARE @result int 
DECLARE @PaymentDate date 
DECLARE @PaymentDepositorName nvarchar(255) 
DECLARE @PaymentNationId int 

SET @PaymentDate = @TransactionDate 
SET @PaymentDepositorName = @DepositorName 
SET @PaymentNationId = (SELECT [NAT_SYS_ID] FROM [MB_TB_NATION] WHERE [NAT_CODE] = @DepositorCountry) 

INSERT INTO [dbo].[MB_TB_TRANSACTION] 
      ([TRA_PAYMENT_DATE] 
      ,[TRA_PAYMENT_DEPOSITOR_NAME] 
      ,[TRA_PAYMENT_NATION_ID] 
      ) 
    VALUES 
      (
      @PaymentDate, 
      @PaymentDepositorName, 
      @PaymentNationId, 
      ) 
    IF @@ERROR = 0 
    SET @result = 1 
    ELSE SET @result = 0 
RETURN @result