[英]Conditional Insert using T-SQL on each row
我有兩個主表
如果position
的行與geography
的行相交,則需要將其插入到第三張表中。
但是問題是我必須檢查第三個表中的現有行,然后將其插入。
我可以使用set操作來做到這一點,但是問題是我無法處理每一行(即,如果有兩行具有相似的數據,則只需插入第一行)。
我可以用游標來做,但是我讀到它是一件壞事。
有人可以幫助我在插入之前處理每一行嗎?
首先,將您需要的所有內容都放在ROW_NUMBER中 ,以便每個ID僅獲得1行。 然后合並 :
;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);
// #temp包含位置和地理位置相交處的所有必填字段,並將使用左聯接將其與第三個表進行檢查
select p.* into #temp
from position p inner join geography g
on p.id = g.id
insert into thirdtable
select * from #temp t1 left join thirdtable t2
on t1.id = t2.id
where t2.id is null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.