日期:2014-05-19  浏览次数:20400 次

sql server2005 中的疑惑,急急急,邹大哥有空指教一下
sql2000+iis6
如下语句:
select   a.*   from   aaa   as   a   left   join   bbb   as   b   on   a.carid=b.carid   where   a.id=1
order   by   a.carid
用如下方式取数据
var   tt=Record( "carid ")
Response.Write(Record( "carid "))
执行没有问题.可以获得值
------------------------------------
------------------------------------
sql2005+iis6
select   *   from   aaa   as   a   left   join   bbb   as   b   on   a.carid=b.carid   where   a.id=1
order   by   a.carid
//在sql2005中使用查询分析,能够成功执行
用上面的方式取数
var   tt=Record( "carid ");
Response.Write(Record( "carid "))
不能获得值.
错误提示为:microsoft   ole   db     provider   for   odbc   drivers错误 '80020009 '
行句柄引用了一个已被删除的行或被标识为删除的行
------------------------------------
------------------------------------
sql2005+iis6
将上面语句改为
select   *   from   aaa   as   a   left   join   bbb   as   b   on   a.carid=b.carid   where   a.id=1
用下面的方式取数,可以正确获得数据
var   tt=Record( "carid ");
Response.Write(Record( "carid "))
------------------------------------
------------------------------------
请问这是怎么回事,如何解决?


------解决方案--------------------
select * from aaa as a left join bbb as b on a.carid=b.carid where a.id=1
order by a.carid
返回的记录集有两个不同的carid列

------解决方案--------------------
本来用*就是个不好的习惯

多表连接用*应该更不可取

改改习惯吧

------解决方案--------------------
至于有时不出错

是因为a.carid,b.carid 正好完全相等,而ado没有很好的检测错误造成的