将存储过程的多个结果集存储到不同的表中

问题描述 投票:0回答:2

我有大约 30 到 40 个存储过程,它们有多个结果集作为输出。我的实际要求是计算 SQL Server 中各个过程的每个结果集中的行数。

我可以更改程序并对每个结果集使用

count()
。然而,实际上,改变30到40个程序是一项乏味的工作。相反,我尝试使用
openquery
进程并将过程的输出存储到某个临时表中。

但是,这样我只能存储第一个结果集,而不能存储任何其他后续结果集。即使我试图使用光标来实现相同的目的,但不起作用。你能帮我一些忙吗?

这是代码:

  create table Orders
   (
      Slno int,
      OrderID Char(20),
      NumberOfItem int,
      CustomerID int
    )

   Create table Customer
                 (
                   CustomerID int,
           CustomerName Char(30),
                   Address nChar(50)
                  )

   Insert into Customer values (1,'Piyu','Bhubaneswar'),
                         (2,'Ranu','Bhubaneswar'),
                         (3,'Tiku','Cuttack'),
                         (4,'Lui','Bhadrak'),
                         (5,'Wasim','Bhadrak'),
                         (6,'Vivek','Dhekanal'),
                         (7,'Romeo','Puri')

    Insert into Orders Values (1,'O1',2,1),
                              (2,'O2',7,1),
              (3,'O3',20,4),
              (4,'O4',2,3),
              (5,'O5',3,3),
                  (6,'O6',1,7),
              (7,'O7',1,5),
                      (8,'O8',3,1),
              (9,'O9',2,6)

    Select * from Orders
    Select * from Customer                 

    Alter Procedure OrderDetails
    @Var_TotalItems Int

    As
    Begin

        Select C.CustomerName,C.[Address ],O.NumberOfItem,O.OrderID   From 
        Customer C
        Join
        Orders O
        On C.CustomerID=O.CustomerID

        Select C.CustomerName,Sum(O.NumberOfItem) 
        [TotalNumberOfItem],Count(O.OrderID) [TotalNumberOfOrders]   From 
        Customer C
        Join
        Orders O
        On C.CustomerID=O.CustomerID
        Group by C.CustomerName
        Having Sum(O.NumberOfItem) >= @Var_TotalItems
    End

      EXEC OrderDetails 4

这里的过程返回多个输出。我的目标是在不更改存储过程的情况下计算每个输出中的行数。

sql sql-server database t-sql stored-procedures
2个回答
1
投票

您可以使用系统变量@@ROWCOUNT来获取查询影响的行数。

@@ROWCOUNT 的值将更新为受最后一条语句( select / insert / update / delete )影响的行数。因此,在执行存储过程后,您可以检查@@ROWCOUNT 中的值来获取过程返回的行数。像这样

declare @c int
exec OrderDetails
select @c =@@Rowcount

select @c

这里,过程 OrderDetails 返回的行数将存储在用户定义的变量 @c 中,您可以将其用于任何其他操作。

请参阅此链接了解有关@@ROWCOUNT的更多详细信息


0
投票

我只是从两个 sql 脚本中获取了计数并将其设置在两个不同的变量中。最后,添加 then 并在第三个变量中设置值。

© www.soinside.com 2019 - 2024. All rights reserved.