求助:这个触发器怎么写啊?

sjyg 2013-08-09 11:53:14
有两个表,cpfl(产品分类表):th(图号),mc(名称),bz(备注)其中th为主键
scjhb(生产计划表):xh序号rq日期 th图号 mc名称 dw单位 sl数量 bz备注 其中rq +th 为主键
我想实现的效果是导入生产计划表的时候,将生产计划表的th,mc dw 这三个字段更新到cpfl表中,第一次导入的时候整个更新到cpfl,以后每次只需增加cpfl表中没有的图号。生产计划表中th图号在cpfl表中有就不用插入,如果没有,插入到cpfl表中。
用触发器能实现这个功能吗?请教高手!!
...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2013-08-10
  • 打赏
  • 举报
回复
更正: select 1 不是取第一个字段,即取一个常数,可以用任何数,如select -100
---涛声依旧--- 2013-08-10
  • 打赏
  • 举报
回复

--select 1 --是取第一个字段
--当然也可以用 select * 如下:
where not exists --不存在
(select * from cpfl b where a.th=b.th) --代表b表中与a表中有th相同的记录

---涛声依旧--- 2013-08-10
  • 打赏
  • 举报
回复
引用 4 楼 lyx_1094562530 的回复:
学习啦 不过“select 1 from cpfl b where a.th=b.th”是什么意思,希望能解释一下

where not exists --不存在
(select 1 from cpfl b where a.th=b.th) --代表b表中与a表中有th相同的记录
party620 2013-08-10
  • 打赏
  • 举报
回复
非常感谢
引用
rockyljt rockyljt
不过[color=#FF00FF]where后面为什么不用加字段??[/color]
lzw_0736 2013-08-09
  • 打赏
  • 举报
回复

CREATE TRIGGER [dbo].[tr_scjhb]
   ON [dbo].[scjhb]
   AFTER INSERT,UPDATE
AS 
begin
	SET NOCOUNT ON;

	INSERT cpfl (th,mc,dw)
	SELECT th,mc,dw FROM INSERTED WHERE th IN 
	(
	SELECT th FROM INSERTED
	EXCEPT
	SELECT th FROM cpfl
	)
end
Andy__Huang 2013-08-09
  • 打赏
  • 举报
回复
可以.
create trigger tri_scjhb
on scjhb
after insert
as
begin
insert into cpfl(th,mc,bz)
select th,mc,bz
from inserted a
where not exists(select 1 from cpfl b where a.th=b.th)

end
Shawn 2013-08-09
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_test ON dbo.scjhb
AFTER INSERT
AS
BEGIN
	INSERT dbo.cpfl(th,mc,dw)
	SELECT DISTINCT th, mc, dw
	FROM INSERTED I
	WHERE NOT EXISTS
	(
		SELECT 1
		FROM dbo.cpfl M
		WHERE i.th = m.th
	)  
END
party620 2013-08-09
  • 打赏
  • 举报
回复
学习啦 不过“select 1 from cpfl b where a.th=b.th”是什么意思,希望能解释一下

34,576

社区成员

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

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