2011-04-04 18 views
1

我真的很奇怪的逻辑,我得到我的定制表与自定义可空字段。SQL - 在定制表中用0代替空值

如何将表中的所有NULL值更改为0?我的意思是 我不知道列的名字!

+0

我会离开空值而不是变为零而不知道列是什么。零在这些列中可能有意义,而在另一些列中可能不是一个允许的值。一个 – HLGEM 2011-04-04 13:51:36

回答

4

通过查询sys.columns和sys.objects,您可以生成一个查询,将每个列都更改为默认值(由您指定),以便为要为其设置默认非空值的列类型。

像这样的东西会给你的东西来看看:

SELECT so.name, 
     sc.name AS varname , 
     st.name AS typename , 
     sc.max_length , 
     sc.[precision] , 
     sc.scale , 
     sc.collation_name 
FROM sys.columns sc 
     JOIN SYS.types st ON sc.system_type_id = st.system_type_id 
          AND sc.user_type_id = st.user_type_id 
     JOIN sys.objects so ON so.object_id = sc.object_id 

然后您可以将光标,这和运行一系列基于类型名称(列型)和VARNAME ALTER /更新命令(列名称)。

6
UPDATE custom_table 
    SET the_column = 0 
WHERE the_column IS NULL; 
2

UPDATE MYTABLE SET mycol = 0 WHERE mycol IS NULL

3

如果你在所有列的意思,那么你可以做一个非常昂贵的查询,将触及所有的记录和列:

UPDATE mytable 
SET 
col1 = isnull(col1, 0), 
col2 = isnull(col2, 0), 
col3 = isnull(col3, 0), 
col4 = isnull(col4, 0), 
col5 = isnull(col5, 0) 
-- etc all the numeric columns * 
  • 如果包括了日期列,他们去 '1900-01-01'