1,获取存储过程最后select返回的结果集。SELECT 数据集返回值

因为select返回的结果是一个表。所以返回的结果需要用一个表接收。使用临时表接收。

被调用的存储过程最后是这样:返回了一个空标题的字段。

asp.net 存储过程返回结果集 sql存储过程返回结果集_asp.net 存储过程返回结果集

什么都不处理,调用存储过程,发现是这样:

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

执行结果:

asp.net 存储过程返回结果集 sql存储过程返回结果集_赋值_02

会发现返回了三个数据集,不仅原来的存储过程会返回一个数据集(这里的情况是不需要那个存储过程返回,而是赋值给变量,由变量返回),这里调用原来的存储过程也并没有真正赋值给变量。所有返回的变量的值仍然为空。

我们真正的需求是只返回一个被赋值了的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

执行结果:

asp.net 存储过程返回结果集 sql存储过程返回结果集_存储过程_03

可见,被调用的存储过程没有返回一个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