两张表数据同步用触发器

首先建立两张测试用表

1
M_StaffSource 触发器对象表
1
M_StaffTarGet 触发器目标表
复制代码
USE [Test]
GO

/****** Object:  Table [dbo].[M_StaffSource]    Script Date: 2021-08-03 12:47:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[M_StaffSource](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [StaffNo] [nvarchar](50) NULL,
    [StaffName] [nvarchar](50) NULL,
    [StaffPay] [decimal](18, 0) NULL,
    [StaffBirthDay] [datetime] NULL,
    [Sex] [int] NULL,
 CONSTRAINT [PK_M_StaffSource] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[M_StaffTarGet](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [StaffNo] [nvarchar](50) NULL,
    [StaffName] [nvarchar](50) NULL,
    [StaffPay] [decimal](18, 0) NULL,
    [StaffBirthDay] [datetime] NULL,
    [Sex] [int] NULL,
 CONSTRAINT [PK_M_StaffTarGet] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
复制代码
1
 创建触发器
复制代码
Create  trigger tr_StaffSource
on [dbo].[M_StaffSource]--触发器对象表
for update ,insert--插入或更新时触发.
as --
begin
if EXISTS(select 1 from M_StaffTarGet  A ,inserted B where A.StaffNo=B.StaffNo)--检查插入或更新的数据在M_StaffTarGet表中是否存在,有则更新,无则添加
update M_StaffTarGet  set [StaffNo]=B.[StaffNo], [StaffName]=B.[StaffName], [StaffPay]=B.[StaffPay],
[StaffBirthDay]=B.[StaffBirthDay] ,[Sex]=B.[Sex]  from inserted B
where  M_StaffTarGet.[StaffNo]=B.[StaffNo] 
else
insert into M_StaffTarGet select [StaffNo],[StaffName],[StaffPay],[StaffBirthDay],[Sex] from inserted
end 
复制代码

 插入新数据测试

INSERT INTO [dbo].[M_StaffSource]
           ([StaffNo],[StaffName],[StaffPay],[StaffBirthDay],[Sex])
     VALUES
           ('001','XXX',16.5,'2012-07-01',2)

测试结果

Select *   FROM [Test].[dbo].[M_StaffSource]
Select *   FROM [Test].[dbo].[M_StaffTarGet]

 

 

 更新数据测试

Update [dbo].[M_StaffSource] Set [StaffName]='YYY' Where [StaffNo]='001'

测试结果

Select *   FROM [Test].[dbo].[M_StaffSource]
Select *   FROM [Test].[dbo].[M_StaffTarGet]

 

posted @   放飞梦想  阅读(341)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示