Sql 将所有0值设置为NULL

Sql 将所有0值设置为NULL,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,如何将SQL表中的所有0值设置为NULL 提前谢谢 update table set col = null where col = 0 但你的意思是在所有栏目中?这将是更多的工作,最好只为每一列创建单独的语句。也可以在存储过程和EXEC中读取模式并生成SQL,但我不建议这样做,因为我认为这是一个一次性的作业,如果您经常这样做,那么设计就有问题。如果是一次性作业,您总是可以从以下语句中获取输出并执行它 UPDATE MyTable SET Col1 = NULLIF(Col1, 0),

如何将SQL表中的所有0值设置为NULL

提前谢谢

update table set col = null where col = 0

但你的意思是在所有栏目中?这将是更多的工作,最好只为每一列创建单独的语句。也可以在存储过程和EXEC中读取模式并生成SQL,但我不建议这样做,因为我认为这是一个一次性的作业,如果您经常这样做,那么设计就有问题。

如果是一次性作业,您总是可以从以下语句中获取输出并执行它

UPDATE MyTable
SET Col1 = NULLIF(Col1, 0),
    Col2 = NULLIF(Col2, 0),
    Col3 = NULLIF(Col3, 0)
WHERE (Col1 = 0 
    OR Col2 = 0 
    OR Col3 = 0)
SELECT  'UPDATE ' 
        + OBJECT_NAME(OBJECT_ID)
        + ' SET '
        + sc.name
        + ' = NULL WHERE '
        + sc.name
        + ' = 0'        
FROM    sys.columns sc 
        INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id
WHERE   st.name IN ('bigint', 'int', 'smallint')        
        AND OBJECT_NAME(OBJECT_ID) = 'YourTable'

那是哪一个呢?将NULL值设置为0,或将0值设置为NULL?标题和正文是相反的问题。它不可用,因为如果我有超过30列,我可以做什么?我是否写入所有列的名称。?@如果需要将30列更新为NULL,当它们为零时,您必须为上面显示的那样编写代码。为什么它不可用?
SELECT  'UPDATE ' 
        + OBJECT_NAME(OBJECT_ID)
        + ' SET '
        + sc.name
        + ' = NULL WHERE '
        + sc.name
        + ' = 0'        
FROM    sys.columns sc 
        INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id
WHERE   st.name IN ('bigint', 'int', 'smallint')        
        AND OBJECT_NAME(OBJECT_ID) = 'YourTable'