簡體   English   中英

在每行上使用T-SQL進行條件插入

[英]Conditional Insert using T-SQL on each row

我有兩個主表

  1. 當前位置
  2. 地理

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM