当我在PERSONS
表中添加记录时,ID
列会自动递增(标识)。
我需要此ID才能将记录插入ADDRESS
表,因此我可以加入这两个记录。
当有多行要追加时,有没有人知道如何在第二个语句中使用ID
?
基本上它会附加一行并使用ID将行附加到另一个表中。
我想避免循环每条记录来执行此操作。
提前谢谢。
INSERT INTO PERSONS (FIRST_NAME, LAST_NAME)
SELECT FIRST_NAME, LAST_NAME
FROM CONTACTS
INSERT INTO ADDRESS (PERSON_ID)
SELECT ID
FROM PERSONS
答案 0 :(得分:1)
您可以使用INSERT ... OUTPUT INSERTED ... INTO
INSERT @PERSONS
(FIRST_NAME,
LAST_NAME)
OUTPUT Inserted.Id
INTO @ADDRESS
SELECT *
FROM @CONTACTS;
或者如果您的需求更复杂,另一种可能性就是合并声明
DECLARE @CONTACTS table ( FIRST_NAME varchar(50) , LAST_NAME varchar(50))
DECLARE @PERSONS table (Id int identity , FIRST_NAME varchar(50) , LAST_NAME varchar(50))
DECLARE @ADDRESS table (PERSON_ID int)
INSERT @CONTACTS VALUES ('FIRST_NAME1' , 'LAST_NAME2'), ('FIRST_NAME1' , 'LAST_NAME2');
MERGE @PERSONS t
using @CONTACTS s
on
t.FIRST_NAME = s.FIRST_NAME
AND t.LAST_NAME = s.LAST_NAME
WHEN NOT MATCHED THEN INSERT (FIRST_NAME, LAST_NAME ) Values (s.FIRST_NAME , s.LAST_NAME)
OUTPUT Inserted.Id into @ADDRESS;
表人
select * from @PERSONS
Id FIRST_NAME LAST_NAME
----------- -------------------------------------------------- --------------------------------------------------
1 FIRST_NAME1 LAST_NAME2
2 FIRST_NAME1 LAST_NAME2
表格地址
SELECT * from @ADDRESS
PERSON_ID
-----------
1
2
答案 1 :(得分:0)
为了可视化@GordonLinoff和@scsimon给出的答案,我创建了一个小demo。您可以查看完整的Microsoft触发器here指南。
<强> DDL 强>:
CREATE TABLE CONTACTS (
FIRST_NAME varchar(50)
, LAST_NAME varchar(50)
);
GO
CREATE TABLE PERSONS (
Id int IDENTITY(1,1)
, FIRST_NAME varchar(50)
, LAST_NAME varchar(50)
);
GO
CREATE TABLE ADDRESS (
PERSON_ID int
);
GO
CREATE TRIGGER TR_AI_Persons_PersonAddress ON PERSONS
AFTER INSERT
AS
BEGIN
INSERT INTO ADDRESS (PERSON_ID) SELECT Id FROM inserted
END
<强> DML 强>:
INSERT INTO CONTACTS(FIRST_NAME, LAST_NAME) VALUES('Bob', 'White');
INSERT INTO CONTACTS(FIRST_NAME, LAST_NAME) VALUES('Tom', 'Black');
INSERT INTO PERSONS (FIRST_NAME, LAST_NAME)
SELECT FIRST_NAME, LAST_NAME FROM CONTACTS;
SELECT * FROM ADDRESS;