建立物理表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
*/