有A主表,B表为临时表两个表,两个表的结构完全相同,主键分别为ch_billno,ch_tableno,ssid,我想做一个触发器,当A表插入主键数据时,把临时表中存在相同主键的数据删除,插入数据的时候会用到sqlbulkcopy方式插入,只会引发一次insert操作。
亲测可用, 楼主速速采纳吧, 呵呵
--1. 创建测试表 A,B 及测试数据
IF OBJECT_ID('dbo.A') IS NOT nuLL
BEGIN
DROP TABLE dbo.A
END
GO
CREATE TABLE dbo.A
(
id INT PRIMARY KEY,
n NVARCHAR(10)
)
GO
IF OBJECT_ID('dbo.B') IS NOT nuLL
BEGIN
DROP TABLE dbo.B
END
GO
CREATE TABLE dbo.B
(
id INT,
n NVARCHAR(10)
)
GO
--SET NOCOUNT ON
INSERT INTO dbo.B (id,n) VALUES(1, N'小明')
INSERT INTO dbo.B (id,n) VALUES(2, N'小华')
SELECT * FROM A
SELECT * FROM B
/*
--A表
id n
----------- ----------
--B表
id n
----------- ----------
1 小明
2 小华
*/
--2. 创建触发器
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[Trig_A_I]'))
DROP TRIGGER [dbo].[Trig_A_I]
GO
-- =============================================
-- Author: yenange
-- Create date: 2015-01-27
-- Description: 当A表插入记录时,删除B表中主键相同的记录
-- =============================================
CREATE TRIGGER dbo.Trig_A_I
ON dbo.A
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.B WHERE b.id IN (
SELECT id FROM inserted
)
END
GO
--3. 测试:往A表中插入 id =1 的记录,
-- 期待结果:
-- A 表有id=1 的记录,
-- B 表原来有 id =1,2 两条记录变为只有id=2 一条记录
INSERT INTO dbo.A (id,n) VALUES(1, N'小明')
SELECT * FROM A
SELECT * FROM B
/*
--A表
id n
----------- ----------
1 小明
--B表
id n
----------- ----------
2 小华
*/