一个关于sql 批量Update的问题

andyking_ 2009-05-22 09:38:08
表结构如:

ID Sex Name

1 s d

1 s d

1 s d

1 s d

5 s d


我想一次性把把ID=1Name列的数据给更新了 怎么写Sql语句比较效率啊?请各位大侠指教下! 谢谢!
...全文
95 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
System_Bug 2009-05-26
  • 打赏
  • 举报
回复
去用DataAdpter吧。更新一次性
dengxiao1981 2009-05-26
  • 打赏
  • 举报
回复
刚发的SQL有错 现更正下 附存储过程例子:





--表结构
--RowID(ID) Status(状态) Sendtime(发送时间)

create Procedure [dbo].[UpdateDeliverQueueForXml]
@xml nvarchar(max)=N''--xml 字符串
--xml格式为
--<root>
--<DeliverQueue RowID=''1'' Status=''2'' Sendtime=''2009-05-26''/>
--</root>
as
set @xml=replace(@xml,'\','')
--将字符串插入XML中
DECLARE @a TABLE(data XML)
INSERT @a SELECT @xml
--将表变量a输出到一个临时结果集,并用来和原始表DeliverQueue join后更改原始表
--这里用到了带有from子句的update语句和cte类型
update DeliverQueue set DeliverQueue.Status = d.v,sendtime=d.j
from DeliverQueue inner join (
SELECT b.id k,c.id v,e.id j FROM @a a
CROSS APPLY
(
SELECT id = t.x.value('@RowID','int') FROM a.data.nodes('//DeliverQueue') AS t(x)
) b
CROSS APPLY
(
SELECT id = t2.x.value('@Status','int')
FROM a.data.nodes('//DeliverQueue') AS t2(x)
where t2.x.value('@RowID','int') = b.id
) c
CROSS APPLY
(
SELECT id = t3.x.value('@Sendtime','datetime')
FROM a.data.nodes('//DeliverQueue') AS t3(x)
where t3.x.value('@RowID','int') = b.id
) e
) as d
on DeliverQueue.RowID = d.k


select @@IDENTITY

dengxiao1981 2009-05-26
  • 打赏
  • 举报
回复
--1、初始化临时表及原始数据
if object_id('tempdb..#t') is not null
drop table #t
if object_id('tempdb..#t2') is not null
drop table #t2

create table #t(k varchar(100),v int)
insert into #t values('a',1)
insert into #t values('b',2)
select * from #t
--输出如下
--k v
--a-1
--b-2

--2、准备批量更新的XML
DECLARE @a TABLE(data XML)
INSERT @a SELECT '
< root>
< i k=''a'' v=''3'' />
''b'' v=''4'' />
< /root>'


--3、将表变量a输出到一个临时结果集,并用来和原始表#t join后更改原始表
--这里用到了带有from子句的update语句和cte类型
update #t set #t.v = d.v
from #t inner join (
SELECT b.id k,c.id v FROM @a a
CROSS APPLY
(
SELECT id = t.x.value('@k','varchar(100)') FROM a.data.nodes('//i') AS t(x)
) b
cyz9977 2009-05-26
  • 打赏
  • 举报
回复
還是把你的問題寫清楚點吧,表結構具體是什麽樣子,更新前的數據什麼樣子,更新后的數據是什麽樣子~~
andyking_ 2009-05-26
  • 打赏
  • 举报
回复
ID不是唯一主键 表结构是一对多关系 这是其中一个表 只写了个例子
pj121108 2009-05-23
  • 打赏
  • 举报
回复
晕 沙发那个说得那么清楚呢
update youtable set[Name]='值' where ID=1

老龙友 2009-05-23
  • 打赏
  • 举报
回复
你的数据本身就有问题:

ID Sex Name
1 s d
1 s d
1 s d
1 s d


类似这样的数据,我想问,在数据库中,如何区分这四条记录?既然不能区分,又如何能分别更新不同Name值?
qq196260188 2009-05-23
  • 打赏
  • 举报
回复
楼主问题的答案就是这个了
update youtable set[Name]='值' where ID=1

如果不是的话,,就是楼主提问的方法有错
qq196260188 2009-05-23
  • 打赏
  • 举报
回复
update youtable set[Name]='值' where ID=1
frankonlyfine 2009-05-23
  • 打赏
  • 举报
回复
name列要更新成不同的数据?
jiangshun 2009-05-23
  • 打赏
  • 举报
回复

update table set [Name]='值' where ID=1
zzxap 2009-05-23
  • 打赏
  • 举报
回复
o
andyking_ 2009-05-23
  • 打赏
  • 举报
回复
name列的数据都不相同
andyking_ 2009-05-23
  • 打赏
  • 举报
回复
是批量啊老兄 一次性把把ID=1的Name列的数据给全部更新了
流枫Maple 2009-05-22
  • 打赏
  • 举报
回复
update youtable set[Name]='值' where ID=1

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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