引用 11 樓 的回復:[quote=引用 3 樓 的回復:]
USE tempdb
GO
IF OBJECT_ID('trig_A_I_U') IS NOT NULL DROP TRIGGER trig_A_I_U
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
CREATE TABLE A(
id INT,
[name] NVARCHAR(20),
[type] INT,
applyType INT
)
CREATE TABLE B(
id INT,
[name] NVARCHAR(20),
[type] INT,
applyType INT
)
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
CREATE TRIGGER dbo.trig_A_I_U
ON dbo.A
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(SELECT * FROM INSERTED WHERE type=2 AND applyType=11)
--AND NOT EXISTS (SELECT * FROM DELETED) --如果不需要更新時插入到B, 去掉注釋即可
BEGIN
INSERT INTO B(id,[name],[type],applyType)
SELECT id,[name],[type],applyType FROM INSERTED WHERE TYPE=2 AND applyType=11
END
END
GO
INSERT INTO A VALUES (1,'a',2,11)
INSERT INTO A VALUES (2,'b',3,11)
INSERT INTO A VALUES (3,'b',4,11)
UPDATE A SET [type]=2 WHERE id=3
SELECT * FROM A
SELECT * FROM B
你好 這個觸發器 如果想對已經 A SET [type]=2 WHERE id=3一遍之后 再一遍那b表又會出現一條重復的數據 為防止這種誤操作 要怎么改呢?[/quote]
INTO B(id,[name],[type],)
id,[name],[type], FROM WHERE TYPE=2 AND =11
and not ( 1 from B where b.id= .id)
如果id是主鍵的話
如果你判斷重復是多個字段一起判斷的話,and not ( 1 from B where b.id= .id)在這段括號里加上其他字段的判斷