将基于插入的插入设置为具有1到0-1关系的两个表
-
06-07-2019 - |
题
我有两个表,第一个有一个主键是一个标识,第二个有一个主键不是,但是该键有一个外键约束回到第一个表的主键。
如果我一次插入一条记录,我可以使用Scope_Identity来获取刚插入到表1中的pk的值,我想插入到第二个表中。
我的问题是我有很多记录来自我想在两个表中插入的选项,我无法想到基于集合的方法来执行这些插入。
我目前的解决方案是使用游标,插入第一个表,使用scope_identity获取密钥,插入第二个表,重复。
我错过了非光标解决方案吗?
解决方案
是的,在线查阅图书中的输出条款。
其他提示
本周我遇到了这个问题:有人将一个带有无意义代理键的表引入到使用自然键的模式中。毫无疑问我很快就会解决这个问题:)直到那时,我正在通过创建一个数据表来解决这个问题: INSERT
:这可能是一个永久或临时的基表或派生表(见下文),无论如何,这应该适合您对基于集合的解决方案的需求。使用此表与表之间的连接以及自然键上的 IDENTITY
列来查找自动生成的值。这是一个简短的例子:
CREATE TABLE Test1
(
surrogate_key INTEGER IDENTITY NOT NULL UNIQUE,
natural_key CHAR(10) NOT NULL CHECK (natural_key NOT LIKE '%[^0-9]%') UNIQUE
);
CREATE TABLE Test2
(
surrogate_key INTEGER NOT NULL UNIQUE
REFERENCES Test1 (surrogate_key),
data_col INTEGER NOT NULL
);
INSERT INTO Test1 (natural_key)
SELECT DT1.natural_key
FROM (
SELECT '0000000001', 22
UNION ALL
SELECT '0000000002', 55
UNION ALL
SELECT '0000000003', 99
) AS DT1 (natural_key, data_col);
INSERT INTO Test2 (surrogate_key, data_col)
SELECT T1.surrogate_key, DT1.natural_key
FROM (
SELECT '0000000001', 22
UNION ALL
SELECT '0000000002', 55
UNION ALL
SELECT '0000000003', 99
) AS DT1 (natural_key, data_col)
INNER JOIN Test1 AS T1
ON T1.natural_key = DT1.natural_key;
不隶属于 StackOverflow