gpt4 book ai didi

sql - 如何向通过外键链接的两个表添加数据?

转载 作者:太空狗 更新时间:2023-10-30 01:51:30 25 4
gpt4 key购买 nike

如果我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com