日期:2014-05-16  浏览次数:20718 次

恳求一句sql。。。。。。。。。。。。。。。。。。。。。。。
如下表   T
一个字段
orderIndex
1
2
3
4
5
6
7
现在假设在程序中删除了2到5共4条纪录,希望把后面的6和7减去删除的纪录数(也就是4)
我是这样写的
update   t   set   orderIndex=orderIndex-(SELECT   count(*)   as   c   from   t   where   orderIndex> =2   and   orderIndex <=5)   where   orderIndex> 5  
麻烦高手帮我看看哪里出问题了,非常感谢


------解决方案--------------------
--首先,update中不能用子查询,必须如下面的语法:

update t set orderIndex=orderIndex-dcount( "* ", "t ", "orderIndex> =2 and orderIndex <=5 ")
where orderIndex> 5


--其次,如果这4 条记录,已经删除,执行上面update无法将6、7替换为2、3,因为dcount()返回的是0。


所以,应该指定固定的值,如4,这样才能实现你的要求:

update t set orderIndex=orderIndex-4
where orderIndex> 5



------解决方案--------------------
access中:
update t set orderIndex=orderIndex-dcount( "* ", "t ", "orderIndex between 2 and 5 ")
where orderIndex> 5
在ADO中,生成临时表解决