SQL 触发器批量删除数据

有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           小华
*/