2014-02-28 109 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

相關問題