如果我有 2 个表,将它们命名为 TableA 和 TableB。 TableB 包含引用 TableA 的外键。我现在需要为给定的场景向 TableA 和 TableB 添加数据。为此,我首先必须在 TableA 中插入数据,然后查找并检索 TableA 最后插入的主键,并将其用作 TableB 中的外键值。然后我在 TableB 中插入值。这似乎只是为了插入一组数据而做的很多工作。我还能如何实现这一目标?如果可能,请为我提供 SQL Server 2005 的 SQL 语句。
最佳答案
听起来不错。请注意,您可以在每行的基础上使用 SCOPE_IDENTITY()
,或者如果您使用 INSERT/OUTPUT 语法,则可以执行基于集合的操作,然后加入第一个输出的集合insert - 例如,这里我们只有 1 个 INSERT(每个)到“真实”表中:
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
关于sql - 如何向通过外键链接的两个表添加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043550/