• 在存储过程中执行别的存储过程并获取其返回的结果集


    背景

      在sqlserver存储过程的编写过程中,通常会碰到繁杂的业务逻辑,将一个大的存储过程拆分成多个小存储过程来做是常用的做法。

    问题

      在存储过程A中需要调用存储过程B,而存储过程B返回一个Table,A需要获取到B的Table,再进行下一步的处理。

      本文解决的问题是:如何在A中执行B,并获取B的返回Table

    思路

    1.   在A中使用Exec来执行存储过程B
    2.   在A中定义临时表,并将B返回的数据插入临时表中

    步骤

    •   新建一张测试表,并批量向表中插入若干数据
      • CREATE TABLE TestTable ( ID INT )
        
        INSERT  INTO TestTable
                SELECT  1
                UNION
                SELECT  2
                UNION
                SELECT  3
                
        SELECT * FROM TestTable

    •   新建存储过程B,B会返回一张Table
      • CREATE PROCEDURE [dbo].[UP_B]
        AS
        BEGIN
              SELECT ID,'ComeFromB' FROM TestTable       
        END
    •   新建存储过程A,A调用B,并将B返回的Table插入到A定义的临时表中
      • CREATE PROCEDURE [dbo].[UP_A]
        AS
        BEGIN
              CREATE TABLE #Temp (ID INT,Msg VARCHAR(30))
              INSERT INTO #Temp EXEC UP_B
              
              SELECT * FROM #Temp     
        END
    •   执行结果
    • 全部代码
    CREATE TABLE TestTable ( ID INT )
    
    INSERT  INTO TestTable
            SELECT  1
            UNION
            SELECT  2
            UNION
            SELECT  3
    go
    
    CREATE PROCEDURE [dbo].[UP_B]
    AS
    BEGIN
          SELECT ID,'ComeFromB' FROM TestTable       
    END
    go
    
    CREATE PROCEDURE [dbo].[UP_A]
    AS
    BEGIN
          CREATE TABLE #Temp (ID INT,Msg VARCHAR(30))
          INSERT INTO #Temp EXEC UP_B
          
          SELECT * FROM #Temp     
    END
    go
    
    EXEC [UP_A]
    go
  • 相关阅读:
    AIR 移动设备上的存储控制
    air写文件 SecurityError: fileWriteResource 时报错的解决方法
    [Embed(source="asset.swf")] 使用其中的所有资源
    as3调用外部swf里的类的方法
    Starling性能优化技巧十五则
    air开发中的requestedDisplayResolution 扫盲
    粒子编辑器的选择
    关于粒子..
    清理缓存功能的实现
    SegmentedControl的使用
  • 原文地址:https://www.cnblogs.com/SmallZL/p/3635988.html
Copyright © 2020-2023  润新知