SQL将所有负数更新为null

时间:2014-03-14 13:24:50

标签: sql sql-server-2008 tsql stored-procedures sql-update

我在SQL Server中有一个包含大约300列的表。我想创建一个存储过程,用null替换所有负数。

该表格包含floatintegernvarchar等类型的列。

我尝试用T-SQL来做,但不能。请帮帮我?

感谢。

编辑:
我需要一个存储过程,如果它们是负数,则将所有数字列转换为null。该表是动态的,可能会增加或减少列数。

1 个答案:

答案 0 :(得分:1)

     DECLARE @updateStatement AS VARCHAR(MAX)
     SET  @updateStatement = null

      set @target_table =''
      select * from systypes
          select @updateStatement = COALESCE(@updateStatement+'UPDATE '+  @TARGET_TABLE+' SET  '+c.name+ '= NULL WHERE' + c.name +' >0;' ,'UPDATE '+  @TARGET_TABLE +' SET  '+c.name+ '= NULL WHERE' + c.name +' >0;'  ) from syscolumns as c
      inner join sysobjects as o on c.id= o.id 
      INNER JOIN systypes as t on c.xtype = t.xtype
      where o.name= @TARGET_TABLE
      AND T.name in('int','real','money','decimal')

      select @updateStatement
--EXEC (@updateStatement)

您需要在T.name in ()的where子句中添加更多内容才能获得所需的所有数据类型。但是这将查询1个表@Target_Table中的所有列,然后为该表中的每个列创建更新语句,如果它们是否定的,则会将该列的ALL ROWS设置为null。

要使工作取消注释EXEC(@UpdateStatement)这是一个真正可怕的想法,如果你已经死定了这个审查你的更新声明


并首先备份

编辑*** 这不会占用帐户的浮动点数