zoukankan      html  css  js  c++  java
  • 在存储过程中执行别的存储过程并获取其返回的结果集

    背景

      在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
  • 相关阅读:
    网络编程基础
    面试题
    面试题合集
    异常
    三个重要的模块loggning,hashlib,configparse
    面向对象进阶
    单例模式
    反射
    封装
    开发规范
  • 原文地址:https://www.cnblogs.com/SmallZL/p/3635988.html
Copyright © 2011-2022 走看看