zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Python基础学习Day2
    Python基础学习
    字符串
    function对象
    GCN入门理解
    L1、L2正则化详解
    Matplotlib数据可视化基础
    sklearn 中模型保存的两种方法
    一文弄懂神经网络中的反向传播法——BackPropagation
    seaborn可视化
  • 原文地址:https://www.cnblogs.com/alsf/p/7358027.html
Copyright © 2011-2022 走看看