【发布时间】:2018-05-21 02:43:47
【问题描述】:
我有大约 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
这里的过程返回多个输出。我的目标是在不更改存储过程的情况下计算每个输出中的行数。
【问题讨论】:
-
对不起,我的回答是错误的。你应该用谷歌 OPENROWSET('') 来执行 store proc。我不确定你的要求。将不同的 para 值传递给同一个 proc 可以返回不同的 rowcount。还有所有 proc接受不同的参数,并且它们的数据类型不同。假设您再增加一个接受日期作为参数的 proc。您将如何传递值以及如何知道它。
-
我已经尝试过使用 openrowset()。它只获取第一个结果集,而不是后面的结果集。你能建议我有什么方法可以使用一些循环或光标来完成我的要求吗?
-
你没有解释整个场景。我希望你以正确的方式满足你的原始要求。不是我只看到一个解决方案。假设你使用 c#,.net 作为前端,那么你可以从前端执行proc并填充数据集。然后你可以使用dataset.Table[0].rows.count,dataset.Table[1].rows.count等等。
标签: sql sql-server database tsql stored-procedures