【问题标题】:SQL update all negative numbers to nullSQL将所有负数更新为null
【发布时间】:2014-03-14 13:24:50
【问题描述】:

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

该表具有floatintegernvarchar 等类型的列。

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

谢谢。

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

【问题讨论】:

  • varchar() 字段为负数是什么意思?
  • 更新表设置 someColumn = null 其中 someColumn
  • 只需要浮点数和整数负数即可为空。我有 varchar 列,但这些不必更改。
  • C.J.日期,规范化,第一范式。只是一些研究建议。

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


【解决方案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 中的所有列,然后为该表中的每一列创建更新语句,如果它们是负数,它将将该列的所有行设置为 null。

为了使工作取消注释 EXEC(@UpdateStatement) 这是一个非常糟糕的想法,如果你不打算这样做,请检查你的更新声明


并首先进行备份

编辑*** 这不会考虑奇怪的浮点数学

【讨论】:

  • 我做了一些更改以使其正常工作。添加开始 - 结束。在 t.Name 中添加浮点数。在 where 子句后添加和空格。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多