我有一个包含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。
思想?
答案 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
兄弟,然后将其删除。