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子句中指定的表。 –