我有一个父表: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)
这确实会产生结果,但需要很长时间。尤其是当它执行数千次时。是否有使用父子关系而不是逻辑的更好的查询?
谢谢。
答案 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