怎样写出这个UPDATE语句?

tenglong001_data 2007-04-28 09:48:17



create table 材料编码表
(
材料名称 varchar(20),
材料编码 varchar(10)
)
insert into 材料编码表 select'螺丝','ls'
insert into 材料编码表 select'高强螺丝','ls'
---------------------------------------------
create table 库存表
(

材料名称 varchar(20),
材料编码 varchar(10),
库存状态 char(1)
)
insert into 库存表 select'螺丝','ls-p','1'
insert into 库存表 select'高强螺丝','ls-g','1'
--想要得到这样的结果
/*
更改材料编码表的材料编码,同时也更新库存表的 材料编码
材料名称 材料编码 库存 状态
螺丝 ls 1
高强螺丝 ls 1
*/

drop table 材料编码表,库存表
...全文
209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
肥胖的柠檬 2007-04-28
  • 打赏
  • 举报
回复
在材料编码表上创建update出发器
tenglong001_data 2007-04-28
  • 打赏
  • 举报
回复
谢谢大家
hrb2008 2007-04-28
  • 打赏
  • 举报
回复
create table 材料编码表
(
材料名称 varchar(20),
材料编码 varchar(10)
)
insert into 材料编码表 select'螺丝','ls'
insert into 材料编码表 select'高强螺丝','ls'
---------------------------------------------
create table 库存表
(

材料名称 varchar(20),
材料编码 varchar(10),
库存状态 char(1)
)
insert into 库存表 select'螺丝','ls-p','1'
insert into 库存表 select'高强螺丝','ls-g','1'
go
create trigger tritest on 材料编码表
for update
as
update 库存表 set 库存表.材料编码=replace(库存表.材料编码,(select 材料编码 from deleted),(select 材料编码 from inserted)) from 材料编码表,库存表 where charindex((select 材料编码 from deleted)+'-',库存表.材料编码)>0 and 库存表.材料名称 = (select 材料名称 from inserted)



update 材料编码表 set 材料编码='lsd' where 材料名称='螺丝'
select * from 库存表
drop table 材料编码表,库存表
--结果
材料名称 材料编码 库存状态
-------------------- ---------- ----
螺丝 lsd-p 1
高强螺丝 ls-g 1

(2 行受影响)
weixiao51 2007-04-28
  • 打赏
  • 举报
回复
创建这个触发器,以后可以随意更改编码了,如果偶尔变更材料编码,也可以用以下sql

update 库存表 set 材料编码 = 材料编码表.材料编码 from 材料编码表 where 库存表.材料名称 = 材料编码表.材料名称
jyxhz 2007-04-28
  • 打赏
  • 举报
回复
办法1:用触发器
办法2:去除库存表的材料名称,材料编码参照约束材料编码表
weixiao51 2007-04-28
  • 打赏
  • 举报
回复
CREATE TRIGGER [材料编码表_update] ON [dbo].[材料编码表]
FOR UPDATE
AS
update 库存表 set 材料编码 = inserted.材料编码 from inserted where 库存表.材料名称 = inserted.材料名称
kenny_appleso 2007-04-28
  • 打赏
  • 举报
回复
这样设计不符合范式,出现数据冗余
xiaoqhuang 2007-04-28
  • 打赏
  • 举报
回复

update 库存表 set 材料编码=(select 材料编码 from 材料编码表 where 材料名称=[库存表].材料名称)
rookie_one 2007-04-28
  • 打赏
  • 举报
回复
在材料编码表上创建update出发器
create trigger trig_name on 材料编码表
for update
as
if update(材料编码)
update a set a.材料编码=b.材料编码 from 库存表 a ,inserted b where a.材料名称=b.材料名称
go


更新操作
update 材料编码表 set 材料编码='aaa'

查看结果
select * from 材料编码表
select * from 库存表
xiaoqhuang 2007-04-28
  • 打赏
  • 举报
回复
数据冗余啊,其实库存表只要存个材料编码表的主键就好了
当然,这样的也可以用事务同时更改2个表

34,593

社区成员

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

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