选择多个列为空行

时间:2014-06-19 02:14:37

标签: sql sql-server

我有1个id列和3个int列。 以这种方式插入数据

insert into table (col1, col2) values (1,1) 

insert into table (col2, col3) values (1,1)

insert into table (col1, col3) values (1,1)

insert into table (col1) values (1)

然后, 第1行,第3列为空 第2行,第1列为空, 第3行,第2列为空。 第4行,第2列和第3列为空。

我想用0替换空值。我该怎么做?

注意:我不知道哪些列为空,因此我无法使用ISNULL(colname, 0)

5 个答案:

答案 0 :(得分:3)

如果您要更新表格以使NULL成为0,请使用coalesce()

update table t
    set col1 = coalesce(col1, 0),
        col2 = coalesce(col2, 0),
        col3 = coalesce(col3, 0)
    where col1 is null or col2 is null or col3 is null;

coalesce()是ANSI标准函数,用于将NULL值替换为其他值。

答案 1 :(得分:2)

如果您希望默认情况下将0插入列,则可以更改表并将DEFAULT CONSTRAINT设置为所需列

ALTER TABLE myTable ADD DEFAULT(0) FOR Col1

不需要更新语句

无论如何,您需要使用UPDATE语句更新现有记录。

答案 2 :(得分:1)

Update table set co1 = ISNULL(col1,0), col2 = ISNULL(col2, 0), col3 = ISNULL(col3, 0)

如果col1,2或3中的值不为null,则它将替换为相同的值,否则如果为null则将替换为0。

答案 3 :(得分:0)

如果要用其他内容替换可能为空的列,请使用IsNull

 SELECT ISNULL(myColumn, 0 ) FROM myTable

这样的事情:

SELECT ISNULL(COALESCE(Col1, Col2, Col3),0) FROM Table

答案 4 :(得分:0)

&#39>我会接受Gordon的,但最后我这样做了,因为我的列数可以改变,我希望它特定于某些行。

CREATE PROCEDURE [setNullToZero]
    @rowSID VARCHAR(60) = 'A'
AS
BEGIN
declare @column_name as varchar(100)
declare col cursor for
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'dlgroups' 
ORDER BY ordinal_position;


open col;
fetch next from col into @column_name;
while @@FETCH_STATUS =0
begin
if (@column_name != 'id')
    exec('Update dlgroups set '+ @column_name +'=ISNULL('+@column_name+',0) WHERE sid='''+@rowSID+'''')

fetch next from col into @column_name
end
close col
deallocate col
END
GO