导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

有关于update整体更新的简单但很刁钻的问题

wtoeb 2007-12-28 12:32:24
问题一:
比如:
id sid name
1 0 aaa
2 3 bbb
3 1 ccc
4 4 ddd
5 2 eee
我要整体更新,其它所有值不变,
sid的值变为1,2,3,4,5

问题二:
在整体更新时,如何只让第一条的sid变为某个值,如8,而其它值不变。
...全文
95 点赞 收藏 18
写回复
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2007-12-28
update a
set sid = (select count(*) from tablea where id <= a.id)
from tablea a
回复
wtoeb 2007-12-28
不要用id=1好吗?因为每次更新的数据都可能不一样。如:
id   sid   name
102 0 aaa
232 3 bbb
311 1 ccc
400 4 ddd
555 2 eee
回复
pt1314917 2007-12-28
楼主给个举例说明一下咯``
回复
-狙击手- 2007-12-28
前面那个id是个自增量,可能是不同的数值。与后面的sid没有联系的。



update a
set sid = (select count(*) from tablea where id <= a.id)
from tablea a
回复
playwarcraft 2007-12-28
在问题2中,就是说,排在第一条的就更新,而其它不用更新(也不是不更新,是sid不更新,而其它值更新为其它相应的数据,如更新成:
aaa+xxx,bbb+xxx,ccc+xxx,ddd+xxx,eee+xxx
)。

=======================================
我理解能力有限.....
update T
set sid=case when id=1 then 8 else id end,
name=name+'xxx'

or

update T
set sid=case when id=1 then 8 else sid end,
name=name+'xxx'
回复
wtoeb 2007-12-28
前面那个id是个自增量,可能是不同的数值。与后面的sid没有联系的。
回复
-狙击手- 2007-12-28
update tablea
set sid = case when id = 8 then id else sid end,
name = name + 'xxxx'
回复
WhyAndAnswer 2007-12-28
sid=id?第一条sid变为8,那就第一条改一下就好了
回复
wtoeb 2007-12-28
前面那个id是个自增量,可能是不同的数值。与后面的sid没有联系的。
回复
wtoeb 2007-12-28
在问题2中,就是说,排在第一条的就更新,而其它不用更新(也不是不更新,是sid不更新,而其它值更新为其它相应的数据,如更新成:
aaa+xxx,bbb+xxx,ccc+xxx,ddd+xxx,eee+xxx
)。
回复
-狙击手- 2007-12-28
update tablea
set sid = id
回复
playwarcraft 2007-12-28
難道是
1. update T set sid=id

2. update T set sid=8 where id=1
回复
playwarcraft 2007-12-28
愣是沒看懂。。。
回复
chuifengde 2007-12-28
1.什么叫整体更新,全部更新?
update [Table] set sid='1,2,3,4,5'
2.
update [Talle] set sid=8 where id=1
回复
WhyAndAnswer 2007-12-28
1、如果sid唯一,
select kid=identity(int,0,1),sid into #a from table1
update table1 set sid=b.kid from table1 a,#a b where a.sid=b.sid
2、update table1
set name=case id when 102(第一条的) then name else name+'aaa' end
回复
WhyAndAnswer 2007-12-28
由于id是自增的,所以sid再自增有点麻烦

第2条可以用case来解决
case id when 1 then 当前值 else 其他值 end
回复
pt1314917 2007-12-28
那楼主要分两次更新了,
这样不能批量更新的。
只能第一次更新所有的,第二次把第一条单独拿出来更新。
回复
wtoeb 2007-12-28
也就是说:
@declare @sid int
set sid = 2
update table set
name = name+'xxx',
sid = 2
where xxx


这时候,where条件过滤出来的有若干条,如:
id   sid   name
102 0 aaa
232 3 bbb
311 1 ccc
400 4 ddd
555 2 eee

其中,每条name都是要更新的,而sid,只需要更新where结果中的第一条。
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告