当前位置: 代码迷 >> Sql Server >> sql server 更新同一张表数据,该如何处理
  详细解决方案

sql server 更新同一张表数据,该如何处理

热度:53   发布时间:2016-04-24 18:39:19.0
sql server 更新同一张表数据
建立物理表AABB 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[aabb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[aabb]
GO

CREATE TABLE [dbo].[aabb] (
[bh] [int] NOT NULL ,
[sl] [numeric](18, 0) NULL ,
[mj] [numeric](18, 0) NULL ,
[mk] [numeric](18, 0) NULL ,
[dw] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO

bh(编号) 主键、唯一 
sl (数量) 
mj(价格)
mk(金额)=sl*mj
dw(单位)
输入数据
bh  sl   mj     mk       dw
1   3    1      null     ab
2   4    2      null     ac
3   5    3      null     ad
4   6    null   null     ab
5   7    null   null     ac
6   8    null   null     ac
7   9    null   null     ad

查询语句
UPDATE B SET MJ=A.Mj
FROM aabb B,aabb A
WHERE B.dw=A.dw  
说明:因为此物理表是为了测试存储过程中临时表的,而
UPDATE @aabb  SET MJ=A.Mj
FROM @aabb ,@aabb A
WHERE dw=A.dw  
提示报错,
所以UPDATE语句这么写。

update aabb set mk=mj*sl

出现问题:
第一次更新没问题,但是把第一个单位为AB、AC、AD 的mj 改为别的参数,这句话就只修改单位为AB的价格,AC和AD不会修改,现在想批量修改同一单位的的价格和金额,以第一条数据位准,不知道怎么写。
坐等。谢谢。



------解决方案--------------------
报什么错?你换成表变量了?
------解决方案--------------------
是这样吗:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[aabb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[aabb]
GO

CREATE TABLE [dbo].[aabb] (
[bh] [int] NOT NULL ,
[sl] [numeric](18, 0) NULL ,
[mj] [numeric](18, 0) NULL ,
[mk] [numeric](18, 0) NULL ,
[dw] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO


insert into [dbo].[aabb]
select 1   ,3    ,1      ,null     ,'ab' union all
select 2   ,4    ,2      ,null     ,'ac' union all
select 3   ,5    ,3      ,null     ,'ad' union all
select 4   ,6    ,null   ,null     ,'ab' union all
select 5   ,7    ,null   ,null     ,'ac' union all
select 6   ,8    ,null   ,null     ,'ac' union all
select 7  , 9    ,null   ,null     ,'ad'
go


--修改成这样
UPDATE B SET MJ=A.Mj
FROM aabb B,aabb A
WHERE B.dw=A.dw  and b.mj is null and a.mj is not null


select * from aabb
/*
bh sl mj mk dw
1 3 1 NULL ab
2 4 2 NULL ac
3 5 3 NULL ad
4 6 1 NULL ab
5 7 2 NULL ac
6 8 2 NULL ac
7 9 3 NULL ad
*/
  相关解决方案