我在SQL Server中有一个包含大约300列的表。我想创建一个存储过程,用null
替换所有负数。
该表格包含float
,integer
,nvarchar
等类型的列。
我尝试用T-SQL来做,但不能。请帮帮我?
感谢。
编辑:
我需要一个存储过程,如果它们是负数,则将所有数字列转换为null。该表是动态的,可能会增加或减少列数。
答案 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)
这是一个真正可怕的想法,如果你已经死定了这个审查你的更新声明
并首先备份
编辑*** 这不会占用帐户的浮动点数