在MSSQL中更新之前检查是否存在唯一值

时间:2014-02-28 17:46:54

标签: sql sql-server sql-update exists unique-constraint

我有一个包含MAC地址列表的表,在某些情况下,这些MAC地址已被填充到十二位数,而在其他情况下则没有。

即:00FF12345678或FF12345678

在某些情况下,此表中存在两个值。我有一个函数用两个零填充值,我可以计算这些重复项的出现次数,但我没有时间或耐心手动删除重复项或填充那些没有记录的那些。

我想我可以使用以下语句将10位数值更新为正确的值:

UPDATE [rs_DEVICES]
SET [device] = dbo.pad_zero(12,[device])
WHERE LEN([device]) < 12

当然这不起作用,因为我只需要更新那些没有现有12位数记录的值。此列的唯一约束阻止我这样做。

我需要在WHERE子句中使用某种IF EXISTS语句,但我无法想出任何有用的东西。

使用MSSQL Server 2008 R2。

思想?

1 个答案:

答案 0 :(得分:2)

这适合你:

UPDATE [rs_DEVICES]
SET [device] = dbo.pad_zero(12,[device])
WHERE LEN([device]) < 12 AND NOT EXISTS (
    SELECT 1 FROM rs_DEVICES r1 WHERE r1.device = dbo.pad_zero(12,[device])
)

我认为这是自我解释,但如果您有任何问题,请发表评论。

老实说,我建议你解决真正的问题。将当前对length=10记录的引用重新分配给各自的length=12兄弟,然后将其删除。