关于tsql:如何在sql表中找到唯一的对值?

How do you find if a unique pair value already exists in a sql table?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Finding duplicate values in a SQL table

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

列A和B组成主键。 当我尝试插入一个记录,其中列A的值已经存在时,我立即得到一个主键约束违规,如果列A不存在,但是列B,我得到唯一键约束违规。 我的问题是如何检查表中是否已存在"值对"? 如果不这样做,否则插入。

我已经看到使用tsql的合并以及如果不存在语句的类似问题的几种解决方案,但我只是无法掌握这个概念。 任何帮助将不胜感激。


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

相反,了解try / catch块:

1
2
3
4
5
6
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;

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


你可以这样做:

1
2
3
4
IF NOT EXISTS (SELECT * FROM yourtable WHERE yourfield1 = 'field1' AND yourfield2 = 'field2')
BEGIN
    INSERT INTO ...
END

如果找不到数据,这只需将数据插入yourtable。


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

1
2
3
4
5
6
7
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

另一个左连接版本:

1
2
3
4
5
6
7
8
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

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