有关于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,而其它值不变。
...全文
132 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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结果中的第一条。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧