假设我有一个带有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=''
)
感谢您的期待
答案 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子句。它会更新每个字段上的每个值,但在信息已存在的情况下,它会使用该信息。