2014-02-28 69 views
0

我有一张表,其中包含MAC地址列表,在某些情况下,这些MAC地址已被填充到十二位数字,而在其他情况下还没有。检查在MSSQL更新之前是否存在唯一值

即: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。

想法?

+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兄弟姐妹,然后将其删除。

+0

上添加一个唯一索引我同意,虽然此字段上的唯一约束是阻止我将10个字符值更新为12个字符,因为这最终会创建一个副本。 一旦非重复的记录被转换为12个字符,我现在可以轻松地删除他们的10位数对应:) –

+0

这就是我的意思。首先,将所有FK重新分配到正确的记录,然后删除“length = 10”记录。无需更新此案例。 – everton

相关问题