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)次。