0
這是嚴重的問題:是否在Sql查詢分析器?來自VS-2005的模糊Sql錯誤
我有面子的怪現狀,我已經測試了以下查詢SQL查詢分析器:
insert into PLCommonTotal(CmnTotal)
select
case
when p.NetpurTot > s.NetsalTot then
(
select NetpurTot from PLPurchaseTotal
)
else
(
Select NetsalTot from PLSaleTotal
)
end
from PLPurchaseTotal p
join PLSaleTotal s
on p.companyID=s.companyID
select * from PLCommonTotal
它正從SQL查詢分析器工作得很好沒有錯誤。
現在看看同一個查詢中VS-2005:
string tot5 = " insert into PLCommonTotal(CmnTotal)" +
" select" +
" case" +
" when p.NetpurTot > s.NetsalTot then" +
" (" +
" select NetpurTot from PLPurchaseTotal" +
")" +
" else" +
" (" +
" Select NetsalTot from PLSaleTotal" +
")" +
" end" +
" from PLPurchaseTotal p" +
" join PLSaleTotal s" +
" on p.companyID=s.companyID";
SqlCommand comcmd = new SqlCommand(tot5, con);
comcmd.Transaction = trans;
comcmd.ExecuteNonQuery();
這是拋出SQL錯誤:「子查詢返回多個值。當子查詢遵循=!= < = < =>> =或子查詢使用表達式時,這是不允許的。聲明已被定爲「。
我想問一下,如果它不被允許,爲什麼它從SQL查詢分析器執行沒有任何錯誤?
SQL Team是否有錯誤?
是的,這是我以後用它,但它不是我的問題。根據你的陳述如果我使用Sql Server-2000比它可以在VS-2005中創建問題,因爲那裏有Sql-2005工具 – mahesh
......你是否說過,對於transact sql,sql server-2000和2005有不同的機制。 – mahesh
@mahesh - 不,db版本之間沒有區別。這是表中包含什麼數據的問題,所以我認爲你使用不同內容的數據庫。如果表中的行少於兩行,則原始查詢不會顯示任何錯誤。當您在子查詢中指定表名時,您將再次使用整個表*,而不是您在主查詢的from子句中指定的表。 –