使用父数据将数据添加到子表

时间:2019-07-17 16:17:55

标签: sql sql-server

我有一个父表:OBSTACLES和一个子表AREA 2

CREATE TABLE [dbo].[OBSTACLES] (
    [ob_fid]  INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
    [RECORD_IDENTIFIER]  INT,
    [aero_surv_fid] INT
);

CREATE TABLE [dbo].[AREA 2] (
    [a2_fid]  INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
        [ob_fid]  INT FOREIGN KEY REFERENCES [dbo].[OBSTACLES]([ob_fid]) ON UPDATE AND DELETE CASCADE
);

我有一个双值数据源,它与[dbo]中的[RECORD_IDENTIFIER]和[aero_surv_fid]值之一匹配。[OBSTACLES]。

我希望使用来自其父级的相应[ob_fid]填充[dbo]。[AREA 2]。

为了明确起见,我先从两个非唯一值开始,然后找到对应的唯一值,然后将其插入子表中。

我一直在使用此SQL在子表中插入一行数据:

DECLARE @ob_fid INT 
SET @ob_fid = (SELECT [ob_fid] FROM [dbo].[OBSTACLES] where [RECORD_IDENTIFIER] = 1021 AND [aero_surv_fid] = 2) 
IF @ob_fid IS NOT NULL INSERT INTO [dbo].[AREA 2] ([ob_fid]) VALUES (@ob_fid)

这确实会产生结果,但需要很长时间。尤其是当它执行数千次时。是否有使用父子关系而不是逻辑的更好的查询?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是您想要的吗?

DECLARE @AreasToInsert TABLE (RECORD_IDENTIFIER int, aero_surv_fid int)
INSERT INTO @AreasToInsert (RECORD_IDENTIFIER, aero_surv_fid)
VALUES (1021, 2), (etc, etc) -- Create this in Excel

INSERT INTO [AREA 2] (ob_fid) 
SELECT ob_fid 
FROM OBSTACLES obs
INNER JOIN @AreasToInsert a ON obs.RECORD_IDENTIFIER = a.RECORD_IDENTIFIER 
    AND obs.aero_surv_fid = a.aero_surv_fid