最近使用触发器搞了个功能,发现里面有个问题:使用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语句,只能插入第一条数据
【SQL|关于SQLSERVER触发器的一个问题】INSERT INTO T1(C1, C2)
SELECT NEWID(), NEWID()
UNION
SELECT NEWID(), NEWID()
UNION
SELECT NEWID(), NEWID()
推荐阅读
- web渗透|SQL注入&PostgreSQL&SQLserver&实战
- java|mysql和mysql调优
- Java|Java Web程序设计——图书管理系统
- Java面向对象程序设计|Java程序设计——JDBC基础(JDBC编程)
- C语言与C++编程|SQL 学习最强刷题网站!
- 数据库|实验八 T-sql,存储过程
- Oracle数据库|Oracle数据库-表设计(三范式)的使用
- ORACLE|How to create new user for ORACLE 19c (CDB & PDB)
- java项目工具|后端中使用分页的几种方法(建议收藏)