2016-08-18 4 views
3

ストアドプロシージャからASP.Net VBスクリプトのページに4つの変数を返そうとしています。最初の結果を返してから壊すだけです。私のSQLの知識は限られています。私は、次のことを試してみました:SQLストアドプロシージャから複数の値を返す

SQL:

Alter PROCEDURE [dbo].[spDashboardPaymentRequests] 
@id integer 
AS 
SELECT COUNT(Receiptno) as requestsSent 
FROM [demofeepay3].[dbo].[vwallrequests] 
Where Orgid = @id 

SELECT Sum(totamount) as requestTotal 
FROM [demofee].[dbo].[vwallrequests] 
Where Orgid = @id 

SELECT Sum(totamount) as requestTotalPaid 
FROM [demofee].[dbo].[vwallrequests] 
Where Orgid = @id AND status = 'paid' 

SELECT Sum(totamount) as requestTotalUnpaid 
FROM [demo].[dbo].[vwallrequests] 
Where Orgid = @id AND status = 'unpaid' 

をASP.NET

Function RequestsSent() 
    Dim objCmd2 As sqlCommand 
    Dim objRdr2 As sqlDataReader 
    objCmd2 = New SqlCommand("spDashboardPaymentRequests", objConn) 
    objCmd2.CommandType = CommandType.StoredProcedure 
    objCmd2.Parameters.AddWithValue("@orgid", Session("orgid")) 
    objConn.Open() 
    objRdr2 = objCmd2.ExecuteReader 
    objRdr2.Read() 
    Session("RequestsSent") = objRdr2("requestsSent") 
    Session("RequestsTotal") = objRdr2("requestTotal") 
    Session("RequestsTotalPaid") = objRdr2("requestTotalPaid") 
    Session("RequestsTotalUnpaid") = objRdr2("requestTotalUnpaid") 
    objConn.Close() 
End Function 
+0

関数の代わりにその方法作る、あなたは何を返していません。あなたの方向にいくつかの出力パラメータを宣言し、SQLでそれらを設定...また、SQLは1ステートメントに減らすことができます。 – Codexer

答えて

5

をあなたが複数のselect秒を持ってムーを意味しています複数の結果セット。

objRdr2.Read() 
Session("RequestsSent") = objRdr2("requestsSent") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotal") = objRdr2("requestTotal") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotalPaid") = objRdr2("requestTotalPaid") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotalUnpaid") = objRdr2("requestTotalUnpaid") 

それとも、あなたが複数の列で1つの結果セットを返すようにSPROCを変更することができますが:だから、あなたがそれらを介して移動する必要が

Alter PROCEDURE [dbo].[spDashboardPaymentRequests] 
@id integer 
AS 
SELECT 
    (SELECT COUNT(Receiptno) FROM [demofeepay3].[dbo].[vwallrequests] Where Orgid = @id) 
    as requestsSent, 

    (SELECT Sum(totamount) FROM [demofee].[dbo].[vwallrequests] Where Orgid = @id) 
    as requestTotal, 

    (SELECT Sum(totamount) FROM [demofee].[dbo].[vwallrequests] Where Orgid = @id AND status = 'paid') 
    as requestTotalPaid, 

    (SELECT Sum(totamount) FROM [demo].[dbo].[vwallrequests] Where Orgid = @id AND status = 'unpaid') 
    as requestTotalUnpaid 
0

を私はASPのことは知らないが、あなたはおそらく行うので、ここですべて取得するクエリです同じ行、それらの、それに応じてASPコードを調整します

SELECT COUNT(Receiptno) as requestsSent, 
     (SELECT Sum(totamount) 
     FROM [demofee].[dbo].[vwallrequests] 
     Where Orgid = @id) as requestTotal, 
     --Query 3, 
     --Query 4 
FROM [demofeepay3].[dbo].[vwallrequests] 
Where Orgid = @id 
+0

乾杯の仲間は、これを試し、あなたに知らせます:-) – Johnn5er

関連する問題