如何将值插入SQL Server中的联结/链接表?

问题描述 投票:1回答:1

关于创建一个交叉点/链接表,我正在背负this question。很清楚如何创建联结表,但我担心如何用数据填充联结表。用两个其他表(电影,作家)之间的数据填充连接表(movie_writer_junction)的最简单和/或最好的方法是什么?

CREATE TABLE movie
(
     movie_id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
     movie_name NVARCHAR(100),
     title_date DATE
);

CREATE TABLE writer
(
     writer_id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
     writer_name NVARCHAR(100),
     birth_date DATE
);

INSERT INTO movie 
VALUES ('Batman', '2015-12-12'), ('Robin', '2016-12-12'),
       ('Charzard, the movie', '2018-12-12')

INSERT INTO writer 
VALUES ('Christopher', '1978-12-12'), ('Craig', '1989-12-12'),
       ('Ash', '1934-12-12')  

CREATE TABLE movie_writer_junction
( 
     movie_id  INT,
     writer_id INT,

     CONSTRAINT movie_writer_pk 
         PRIMARY KEY(movie_id, writer_id),
     CONSTRAINT movie_id_fk 
         FOREIGN KEY(movie_id) REFERENCES movie(movie_id),
     CONSTRAINT writer_fk 
         FOREIGN KEY(writer_id) REFERENCES writer(writer_id)
);

最终的联结表目前是空的。这是一个简单的示例,您可以手动将数据填充到联结表中,但如果我有两个包含数百万行的表,那么这样的事情是如何完成的?

sql sql-server database-design relational-database
1个回答
1
投票

嗨,我猜这与你不能依赖身份列在不同地区相同的事实有关。

您可以将插入作为2 src表中的交叉连接编写

Insert junc_table (writer_id, movie_id)
Select writer_id , movie_id
from writer 
CROSS Join 
movie
where writer_name = 'Tolkien' and movie_name = 'Lord of the Ring'

这样,您始终可以从两个表中获得正确的代理键(标识)。使用一点动态SQL很容易为所有现有的联结组合生成SQL语句

另一种方法是使用SET IDENTITY_INSERT ON - 但这需要在加载其他2个表时完成,并且该船可能已经航行!

© www.soinside.com 2019 - 2024. All rights reserved.