出力として複数の結果セットを持つストアドプロシージャが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
手順複数の出力を返す:ここ
コードです。私の目的は、ストアドプロシージャを変更せずに各出力の行数を数えることです。
申し訳ありません私の答えだったwrong.youは、ストアproc.iが同じにあなたのrequirement.Passing異なるパラ値について確認していない実行するためにOPENROWSET(「」)をグーグル必要がありますprocは別のrowcountを返すことができます。また、すべてのprocは異なるパラメータを受け入れ、そのデータ型は異なります。あなたがパラメータとして日付を受け入れるprocをもう1つ選択します。 – KumarHarsh
私は既にopenrowset()で試してみました。最初の結果セットのみを取得しますが、後のセットは取得しません。 私の要件を達成するためにループやカーソルを使用する方法はありますか? –
あなたはシナリオ全体を説明していません。私は正しい方法で元の要件をカバーしていることを願っています。ただ1つの解決策しか見ていません。フロントエンドとしてc#,. netを使用していれば、フロントエンドからprocを実行し、あなたはdataset.thenを使用することができます。テーブル[0] .rows.count、dataset.Table [1] .rows.countなど。 – KumarHarsh