1

可能重复:
在 SQL 表中查找重复值

一般来说,我对 T-Sql 和 Sql 编程完全陌生,所以我希望有人能引导我朝着正确的方向前进。这是我的问题.. 我有一个只有 2 列的表,AppliedBandwidthSourceKey 和 AppliedBandwithSource 为简单起见,我将分别称它们为 A 列和 B 列。

A 列和 B 列构成主键。当我尝试插入 A 列的值已经存在的记录时,我立即得到主键约束违规,如果 A 列不存在但 B 列存在,我得到唯一键约束违规。我的问题是如何检查表中是否已经存在“值对”?如果没有,那么什么都不做,否则插入。

我已经看到使用 tsql 的 merge 和 if not exists 语句来解决类似问题的几种解决方案,但我就是无法理解这个概念。任何帮助将不胜感激。

4

4 回答 4

1

你可以这样做:

IF NOT EXISTS (select * from yourtable where yourfield1 = 'field1' and yourfield2 = 'field2')
BEGIN
    INSERT INTO ...
END

如果找不到数据,这只是将数据插入到您的表中。

于 2012-07-10T15:33:37.963 回答
1

你实际上不必先做这项工作。. . 毕竟,这就是约束正在做的事情。

相反,了解 try/catch 块:

begin try
    insert into t(a, b) values('a', 'b')
end try
begin catch
    print 'Oops! There was a problem, maybe a constraint violation for example'
end catch;

该语句尝试插入。如果出现故障,则进入“catch”部分,您可以做任何您想做的事情(包括忽略问题)。该文档相当清楚(http://msdn.microsoft.com/en-us/library/ms175976.aspx)。

于 2012-07-10T15:38:22.860 回答
0

使用计数语句,其中(A 和 B)如果计数返回 0,则该对不存在。如果它返回一个非 0 (X) 的数字,则条目对存在 (X) 次。

于 2012-07-10T15:34:22.527 回答
0

在某些情况下,您可以使用左/右连接,您可以在其中加入您的 PK:

insert into tableA (Id,AnotherId)
select b.Id, b.AnotherId
from tableB b
left join tableA a
    on b.Id = a.id
        and b.AnotherId = a.AnotherId
where a.Id is null

另一个左连接版本:

insert into tableA (Id,AnotherId)
select b.Id, b.AnotherId
from (select Id = 5, AnotherId = 5) b
left join tableA a
    on b.Id = a.id
        and b.AnotherId = a.AnotherId
where a.Id is null
and a.Id is null
于 2012-07-10T15:55:20.857 回答