sqlserver,獲取調用存儲過程返回數據的方法。


1,獲取存儲過程最后select返回的結果集。SELECT 數據集返回值

因為select返回的結果是一個表。所以返回的結果需要用一個表接收。使用臨時表接收。

被調用的存儲過程最后是這樣:返回了一個空標題的字段。

什么都不處理,調用存儲過程,發現是這樣:

ALTER PROCEDURE [LC0**999].[ERP_***_CreateBatchCode]
(
    @MaterialID  varchar(50),  
    @CompanyID   varchar(50),  
    @Flag        varchar(50),  
    @PrefixObj   varchar(50) 
)
AS
BEGIN
    declare @v_batchcode varchar(36);
    exec @v_batchcode=erp_IM_BatchesSN_CreateCode @MaterialID,@CompanyID,@Flag,@PrefixObj; 
   
    select @v_batchcode BATCHCODE;
END   

執行結果:

會發現返回了三個數據集,不僅原來的存儲過程會返回一個數據集(這里的情況是不需要那個存儲過程返回,而是賦值給變量,由變量返回),這里調用原來的存儲過程也並沒有真正賦值給變量。所有返回的變量的值仍然為空。

我們真正的需求是只返回一個被賦值了的BATCHCODE。

修改:用臨時表接收返回結果集,把臨時表的相關字段賦值給變量。如下:

ALTER PROCEDURE [LC00****].[ERP_****_CreateBatchCode]
(
    @MaterialID  varchar(50),  
    @CompanyID   varchar(50),  
    @Flag        varchar(50),  
    @PrefixObj   varchar(50) 
)
AS
BEGIN

    declare @v_batchcode varchar(36);
    
    CREATE TABLE [LC0019999].[batchtemp](
        batchcode    varchar(36)
    )

    INSERT batchtemp exec @v_batchcode=erp_IM_BatchesSN_CreateCode @MaterialID,@CompanyID,@Flag,@PrefixObj; 
    
    SELECT @v_batchcode=batchtemp.batchcode FROM batchtemp;
    
    DROP TABLE batchtemp; 

    select @v_batchcode BATCHCODE;

END

執行結果:

可見,被調用的存儲過程沒有返回一個select結果集,並且,值被成功的賦值給變量。只返回了一個數據集。

 

2,OUPUT參數返回值

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
END
END

存儲過程中獲得方法:

DECLARE @o_buyerid int
DECLARE @o_id bigint
EXEC [nb_order_insert] @o_buyerid,@o_id output

3,RETURN過程返回值

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT * FROM [Shop] WHERE [s_id] = @o_buyerid ))
BEGIN
 INSERT INTO [Order](o_buyerid ) VALUES (@o_buyerid ) 
 SET @o_id = @@IDENTITY 
 RETURN 1 — 插入成功返回1 
END 
ELSE 
 RETURN 0 — 插入失敗返回0 END

存儲過程中的獲取方法

DECLARE @o_buyerid int
DECLARE @o_id bigint
DECLARE @result bit
EXEC @result = [nb_order_insert] @o_buyerid ,o_id output

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM