关于SQLSERVER触发器的一个问题

最近使用触发器搞了个功能,发现里面有个问题:使用INSERT SELECT插入数据时,只能插入一条数据。大致的测试情况如此:

1、创建表格:

CREATE TABLE [dbo].[T1](--T1,作为主表 [c1] [varchar](36) NULL, [c2] [varchar](36) NULL ) ON [PRIMARY]

CREATE TABLE [dbo].[T2](--T2,作为从表 [c1] [varchar](36) NOT NULL, [c2] [varchar](36) NOT NULL ) ON [PRIMARY]

2、创建触发器: CREATE TRIGGER [dbo].[T1_TRIGGER] ON [dbo].[T1] AFTER INSERT AS BEGIN SET NOCOUNT ON; DECLARE @c1 VARCHAR(36); DECLARE @c2 VARCHAR(36); SELECT @c1=c1,@c2=c2 FROM inserted -- Insert statements for trigger here INSERT INTO T2(c1,c2) VALUES (@c1,@c2) END

3、测试SQL:

3.1、单条插入语句执行,正常

INSERT INTO T1(C1, C2) VALUES(NEWID(), NEWID())

3.2、多条插入语句执行,正常

INSERT INTO T1(C1, C2) VALUES(NEWID(), NEWID())

INSERT INTO T1(C1, C2) VALUES(NEWID(), NEWID())

INSERT INTO T1(C1, C2) VALUES(NEWID(), NEWID())

3.3、使用INSERT-SELECT语句,只能插入第一条数据

INSERT INTO T1(C1, C2) SELECT NEWID(), NEWID() UNION SELECT NEWID(), NEWID() UNION SELECT NEWID(), NEWID()

经验分享 程序员 微信小程序 职场和发展