SQL Server插入查询避免重复

时间:2017-10-18 15:35:47

标签: sql sql-server tsql

我需要从TableB插入TableA并避免重复,我在下面尝试了它给出了一个错误:

  

违反主键约束' PK_TableA'。无法插入重复的密钥...

 insert  into TableA (DataField, TitleId, ClassId, ValueOrder, StrValue)
    select 'Somtext',[title_id],'-1', '1', 
          [reference_text]
    from TableB
    where TableB.SomeColumn ='sometext 2014'



TableA
Title_id  reference_text
1234       ABCD   
1487       XFRE
1434       DERE

TableB
DataField  TitleId  ClassId  ValueOrder  StrValue

现在问题是TableB中已存在数据。当TableA.Tile_id = TableB.TitleId匹配时,我需要避免。

3 个答案:

答案 0 :(得分:2)

使用where not exists

insert  into TableA (DataField, TitleId, ClassId, ValueOrder, StrValue)
select 'Somtext',[title_id],'-1', '1', 
       [reference_text]
from TableB
where TableB.SomeColumn ='sometext 2014'
and not exists (select 1 from TableA ta where ta.TitleID = TableB.title_id)

答案 1 :(得分:0)

看看这篇文章,你可以进行合并,然后匹配(删除/更新/插入)。

https://www.red-gate.com/simple-talk/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/

答案 2 :(得分:0)

NOT IN添加到WHERE - 这样的子句应该有效:

WHERE TableB.SomeColumn ='sometext 2014'
AND TableB.TitleId NOT IN (SELECT Tile_Id FROM TableA)