在每行上使用T-SQL进行条件插入

时间:2016-08-22 09:22:53

标签: sql sql-server tsql

我有两张主表

  1. Postion
  2. 地理
  3. 如果position中的行与geography中的行相交,我需要将其插入第三个表格。

    但问题是我必须检查第三个表中的现有行然后插入它。

    我可以通过set操作执行此操作,但问题是我无法处理每一行(即,如果有两行具有相似的数据,则只需要插入第一行)。

    我可以使用光标,但我读到了一件坏事。

    在插入之前,有人可以帮我处理每一行吗?

2 个答案:

答案 0 :(得分:3)

首先在CTE中使用ROW_NUMBER只需要为每个ID获取1行。然后是MERGE

;WITH cte AS (
SELECT  g.*,
        ROW_NUMBER() OVER (PARTTION BY SomeColumn ORDER BY SomeColumn) as rn
FROM Postion p
INNER JOIN geography g
    ON p.someID = g.SomeID
)

MERGE ThirdTable as target
USING (SELECT * FROM cte WHERE rn = 1) as source
ON target.SomeID = source.SomeID
WHEN NOT MATCHED THEN 
    INSERT (target fields)
    VALUES (source values);

答案 1 :(得分:0)

// #temp包含位置和地理位置相交的所有必填字段,并使用左连接检查第三个表

find