• 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

     

  • 相关阅读:
    AGC算法
    Cordic算法
    git Remote: HTTP Basic: Access denied Git failed with a fatal error.
    mysql 定义用户变量
    Docker 报错处理
    IIS,Docker 部署.Net Core
    SpringBoot向后台传参的若干种方式
    修改Mysql 数据库以及表字符集
    安装Docker
    获取北京时间
  • 原文地址:https://www.cnblogs.com/alsf/p/7358027.html
Copyright © 2020-2023  润新知