2011-08-08 16 views
5

Tablomu güncellemek istiyorum, böylece NULL değeri olan her sütun boş ve dize olarak güncellenir.Boş dize için NULL olan tüm sütunlar nasıl güncellenir?

Şu anda aşağıdaki sorgu var, ancak yalnızca bir sütun güncelleştirir ve boş dizge NULL olan tüm sütunları güncelleştirmek istiyorum.

UPDATE table SET column1='' WHERE column1 IS NULL 

cevap

13

Böyle bir şey yaparak bir ifadeyle birden çok sütun güncelleyebilirsiniz:

UPDATE table SET column1='', column2='', column3='' WHERE column1 IS NULL 

ANCAK Thsi sadece nerede fıkra bağlı olarak güncellenir.

Yapmaya çalıştığınız şey için ayrı ifadelere ihtiyacınız olacak.

UPDATE table SET column1='' WHERE column1 IS NULL 
UPDATE table SET column2='' WHERE column2 IS NULL 
UPDATE table SET column3='' WHERE column3 IS NULL 

DÜZENLEME bu deneyin:

UPDATE table SET column1= IfNull(column1,''), column2= IfNull(column2,'') , column3= IfNull(column3,'') 
+0

Evet böyle bir şey yapabilirsiniz. –

+1

Sanırım herkesin de aynı çözümü var ... Daha fazla "otomatik" bir şey umuyordum ama bu çok sorgulama anlaşmanın tek yolu olabilir ... – Jona

+0

@Moto: ne "biraz kokuyor" ön uç belki de NULLs çok iyi işlemez çünkü tüm NULL sütunları boş dizge? – Tim

0

dinamik standart SQL bir açıklama oluşturamaz. Bir programlama dilinin dışarıdan yardımı olmadan, bu ifadeyi her sütun için tekrarlamanız gerekir.

0

Değiştirmek istediğiniz sütunları belirtmeniz gerekir. Tablonuzu dört sütun vardı Yani eğer, böyle birden fazla sorgu gerekir:

UPDATE table SET column1 = '' WHERE column1 IS NULL; 
UPDATE table SET column2 = '' WHERE column2 IS NULL; 
UPDATE table SET column3 = '' WHERE column3 IS NULL; 
UPDATE table SET column4 = '' WHERE column4 IS NULL; 

Bu sütunlardan sadece bir BOŞ olması koşuluyla boş bir dizeye tüm sütunları ayarlamak isterseniz biraz daha kolay alır, ama Bu ne istediğinizi olmayabilir: vb

UPDATE table SET column1 = '', column2 = '', column3 = '', column4 = '' 
WHERE (column1 IS NULL 
OR column2 IS NULL 
OR column3 IS NULL 
OR column4 IS NULL); 
sen kendine bir sütun güncellemek ve orada boş kontrol edebilirsiniz
2

...

UPDATE table SET 
column1 = ISNULL(column1,''), 
column2 = ISNULL(column2,''), 
column3 = ISNULL(column3,'') 

..

WHERE yan tümcesi gerekli olduğundan, tüm kayıtlarda çalışması gerekir.

+0

Bu, her bir sütunun isimlerini bildiğini ima ediyor, OP'nin bunu otomatik olarak yapmanın bir yolunu aradığını düşünüyorum. –

1

Aslında ona iki seçenek verdi yüzden, bu

DECLARE @sql varchar(max)='' 

select @sql= @sql+''+ c.name + '= CASE WHEN ' +c.name+'=''''THEN NULL ELSE ' +c.name+' end, 
' 
from sys.tables t 
JOIN sys.columns c 
ON t.object_id = c.object_id 
WHERE t.object_id = 1045578763 -- Your object_id table 


PRINT 'UPDATE <TABLE> 
     SET '[email protected] 
İlgili konular