惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
雷峰网
雷峰网
宝玉的分享
宝玉的分享
IT之家
IT之家
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园 - 叶小钗
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
美团技术团队
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
L
LangChain Blog
U
Unit 42
有赞技术团队
有赞技术团队
博客园_首页

博客园 - 放飞梦想

SQL SERVER数据库表结构对比 无法识别的配置节点 applicationSettings/* Properties.Settings 解决方法 删除重复数据只保留一条 SQL语句的事务处理及错误处理结构 SQLServer查询执行过的SQL记录 软件的自动更新实现 国家气象局提供的天气预报接口 SQL SERVER 2005 数据库状态为“可疑”的解决方法 Oracle 递归查询子节点和父节点 SQLite初体验 清理数据库日志 Sqlserver数据库还原一直显示“正在还原…”解决方法 如何查看 SQL Server 执行的历史 SQL 语句记录? MYSQL 命令行大全 (简洁、明了、全面) C#Datatable导入sqlserver数据库中,三种常见,快捷的方法 MongoDB下载页面 等级保护和分级保护区别与联系 等级保护和分级保护 SQL2005EXPress自动备份
两张表数据同步用触发器
放飞梦想 · 2021-08-03 · via 博客园 - 放飞梦想

首先建立两张测试用表

M_StaffSource 触发器对象表
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
 创建触发器
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]