2014-03-03 47 views
0

我有一個本地託管的網站,帶有MS SQL Server數據庫。我試圖填充數據庫中的記錄列表,但查詢返回錯誤。ASP:子查詢返回的值超過1

代碼的ASP網頁:

dim sRegID 

sRegID = Request.QueryString("RegistrantID") 
sSQL = "select CourseID, CourseSectionID, RegistrationID, RegistrantCourseID,AmountDeferred,PaymentType, DateSubmitted, (select TransactionID from qryRegistrantCoursePayment where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID) as TransactionID, (select PaymentID from qryRegistrantCoursePayment where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID) as PaymentID from qryRegistrantCourseDetail where RegistrationStatus in ('D') and RegistrantID = " & sRegID & " and AmountDeferred > 0 order by DateSubmitted" 
Set rs = objconn.execute(sSQL) 

錯誤消息:

的Microsoft OLE DB提供程序SQL Server錯誤 '80004005'

子查詢返回多個值。當 子查詢遵循=,!=,<,< =,>,> =或當子查詢用作 表達式時,這是不允許的。

有人可以幫我解決這個問題嗎?我在查詢寫作方面不是很有經驗。提前致謝。 :)


好吧,查詢是用連接修復的......但是現在asp已經出現了。

Else 
Response.Write "<table border=1 cellpadding=3 cellspacing=0>" 
Response.write "<tr>" 
Response.Write "<td>" & "<a href=""javascript:pick('','','','','','','','','')"">" & "None Selected" & "</a></td>" 
Response.write "</tr>" 
Do Until rs.eof 

Response.Write "<tr>" 
'Response.Write "<td>" & "<a href=""javascript:pick('" & trim(rs("BLDG_CD")) & "')'>" & trim(rs("AC_Title")) & "</a></td>" 
Response.Write "<td>" & "<a href=""javascript:pick(" & quote(trim(rs("q.RegistrationID"))) & "," & quote(trim(rs("q.RegistrantCourseID"))) & "," & quote(trim(rs("q.CourseID"))) & "," & quote(trim(rs("q.CourseSectionID"))) & "," & quote(trim(rs("x.PaymentID"))) & "," & quote(trim(rs("q.AmountDeferred"))) & "," & quote(trim(rs("q.PaymentType"))) & "," & quote(formatdatetime(trim( rs("q.DateSubmitted")),2)) & ",'" & trim("" & rs("x.TransactionID")) & "')"">" & formatcurrency(0 & rs("q.AmountDeferred"))& "</a></td>" 
Response.Write "</tr>" 

錯誤消息:

ADODB.Recordset錯誤 '800a0cc1'

產品無法對應於請求 名稱或序號的集合中找到。

我無法理解爲什麼錯誤是ADODB,而我又用

Set rs =objconn.execute(sSQL) 

感謝任何可能的幫助。

回答

0

根據錯誤消息,兩個子查詢(select TransactionID ...(select PaymentID ...返回多行(例如,您的數據模型允許每個註冊人每個課程支付多個付款?)。

雖然可以解決此通過與TOP 1引入子查詢,這將是有益的,以確定爲什麼數據不表現爲你的期待:

而且,因爲兩個子查詢在同一個錶行事用相同的謂詞,您可以更改子查詢到一個派生表,並加入到,而不是:

select 
    CourseID, 
    CourseSectionID, 
    RegistrationID, 
    RegistrantCourseID, 
    AmountDeferred, 
    PaymentType, 
    DateSubmitted, 
    x.TransactionID, 
    x.PaymentID 
from qryRegistrantCourseDetail 
    cross apply 
    (select TOP 1 TransactionID, PaymentID 
    from qryRegistrantCoursePayment 
    where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID 
    ) AS x 
where ... 
order by DateSubmitted 

如果解決了,爲什麼子查詢返回多行,那麼你可以改變一個簡單連接:

inner join qryRegistrantCoursePayment as x 
    on x.RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID 

SqlFiddle of both queries here

+0

感謝斯圖爾特。 這是由於一些特殊情況允許超過1條記錄(具體來說是2條)。 如果我需要顯示兩條記錄,會不會加入工作?如果是,我該如何修改當前查詢? – user3179075

+0

是的,如果你直接使用JOIN,那麼它會返回兩個記錄。我已經用SqlFiddle更新了 – StuartLC

+0

再次感謝。查詢似乎鰭,但現在的ASP正在起作用。 'code' – user3179075

相關問題