我需要从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
匹配时,我需要避免。
答案 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)