使用默认值适当更新TABLE列

时间:2011-11-20 12:34:46

标签: sql-server default

假设我有一个带有a,b,c,d,e列的'xyz'表,我发现表中的列是随机空的。现在我必须扫描表格,找出列为空的位置,并使用默认值更新列(示例a为'a',b为'b',c为'c'...),而其他列则保留在行中不变。怎么办?

我已经创建了以下程序,但它并不适合我:

 create procedure SP_DEFAULTS as
 update xyz set a= 'a',
b= 'b',
c= 'c'
d= 'd',
e= 'e' 

where (a='' 
or b='' 
or c='' 
or d='' 
or e=''
)

感谢您的期待

3 个答案:

答案 0 :(得分:4)

不要运行SQL。你会更新错误的东西。

update xyz
set
   a=CASE
        WHEN LTRIM(ISNULL(a,''))='' THEN 'a'
        ELSE a
     END,
   b=CASE
        WHEN LTRIM(ISNULL(b,''))='' THEN 'b'
        ELSE b
     END,
   c=CASE
        WHEN LTRIM(ISNULL(c,''))='' THEN 'c'
        ELSE c
     END,
   d=CASE
        WHEN LTRIM(ISNULL(d,''))='' THEN 'a'
        ELSE d
     END,
   e=CASE
        WHEN LTRIM(ISNULL(e,''))='' THEN 'a'
        ELSE e
     END
WHERE
(
        LTRIM(ISNULL(a,''))='' 
    OR  LTRIM(ISNULL(b,''))='' 
    OR  LTRIM(ISNULL(c,''))='' 
    OR  LTRIM(ISNULL(d,''))='' 
    OR  LTRIM(ISNULL(e,''))='' 
)

答案 1 :(得分:2)

当前其中一个字段为空时,您所拥有的内容将更新整行。您将不得不做更多这样的事情,以便您只能在该字段为空时更新该字段。在完成SP之后,您应该在表格中为每个字段设置默认值,以便不再发生这种情况。

UPDATE xyz 
SET    a = 'a'
WHERE  a = ''

UPDATE xyz 
SET    b = 'b'
WHERE  b = ''

UPDATE xyz 
SET    c = 'c'
WHERE  c = ''

UPDATE xyz 
SET    d = 'd'
WHERE  d = ''

UPDATE xyz 
SET    e = 'e'
WHERE  e = ''

答案 2 :(得分:2)

update xyz set 
 a=coalesce(a,'a'), 
 b=coalesce(b,'b'), 
 c=coalesce(c,'c'),
 d=coalesce(d,'d')

Coalesce返回一系列值/变量中的第一个非空值。因此,如果字段a为null,则返回字符串'a'

我使用pk和evalalute在其上放置一个where子句,如果这样做你想要的然后删除where子句。它会更新每个字段上的每个值,但在信息已存在的情况下,它会使用该信息。