A表插入数据后,将记录同步给B表,触发器怎么写

小野马1209 2020-03-13 04:11:37
--需求描述:想创建一个触发器,当A表插入记录时,如果【设备名称】不在B表,且【类型】=0的记录插入B表
--其他需求:B表的序号要按顺序排序
--另外问下,触发器会牺牲很多效率吗

Declare @A table(No int,Name varchar(50),TypeId int)--【序号】、【设备名称】、【类型】
INSERT INTO @A
SELECT 1,'A设备',0 UNION ALL
SELECT 2,'B设备',0 UNION ALL
SELECT 5,'C设备',1 UNION ALL
SELECT 8,'D设备',0


Declare @B table(No int,Name varchar(50))--【序号】、【设备名称】
INSERT INTO @B
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
难得自然萌 2020-03-13
  • 打赏
  • 举报
回复
数据量大的话不如搞个同步好了
小野马1209 2020-03-13
  • 打赏
  • 举报
回复
引用 1 楼 Hello World, 的回复:
第一:表变量里加触发器,不支持吧?
第二:表的内容不需要排序写入,只要查询时排序即可
第三:性能肯定有影响,相当于多写了一个表还增加了判断逻辑,至于影响大不大也要看写入的频率,数据的量和复杂性

普通表的话可以用类似以下的触发器
CREATE TRIGGER [trXXX]
ON someTable
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO descTable(xxx, yyy, zzz)
SELECT xxx, yyy, zzz
FROM inserted i
WHERE i.yyy = 0
AND NOT EXISTS (SELECT 1 FROM descTable d INNER JOIN inserted ii ON d.somecol = ii.somecol);
END;
触发器刚试了下搞定了,再请教下,A表前端人员一天大概3个单左右,插入A表数据大概5000-10000条(操作次数一天一般小于10次)用触发器合适吗
netcup 2020-03-13
  • 打赏
  • 举报
回复
CREATE TRIGGER sp_tmgx_b ON [dbo].[b] FOR INSERT AS INSERT INTO b(字段名) SELECT * FROM inserted a LEFT b b ON a.name=b.name WHERE b.name=NULL AND typeid=0
Hello World, 2020-03-13
  • 打赏
  • 举报
回复
第一:表变量里加触发器,不支持吧?
第二:表的内容不需要排序写入,只要查询时排序即可
第三:性能肯定有影响,相当于多写了一个表还增加了判断逻辑,至于影响大不大也要看写入的频率,数据的量和复杂性

普通表的话可以用类似以下的触发器
CREATE TRIGGER [trXXX]
ON someTable
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO descTable(xxx, yyy, zzz)
SELECT xxx, yyy, zzz
FROM inserted i
WHERE i.yyy = 0
AND NOT EXISTS (SELECT 1 FROM descTable d INNER JOIN inserted ii ON d.somecol = ii.somecol);
END;

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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