如何使用MSSQL在值为null的特定表中的所有列中设置0
让表名为MyTable 我当前的数据如下所示: 下面,我需要在对上表进行查询之后:如何使用MSSQL在值为null的特定表中的所有列中设置0,sql,sql-server,Sql,Sql Server,让表名为MyTable 我当前的数据如下所示: 下面,我需要在对上表进行查询之后: 实际上,我需要在单个查询中更新值为NULL的所有列。如果希望将NULL视为0,请使用ISNULL。像这样 SELECT ISNULL(Column1,0) FROM YourTable 或者,您需要将值更新为0(如果为NULL),并保持值不变。它们在update语句中使用大小写。像这样 Update YourTable SET Column1 = CASE WHEN Column1 IS NULL THEN 0
实际上,我需要在单个查询中更新值为NULL的所有列。如果希望将NULL视为0,请使用ISNULL。像这样
SELECT ISNULL(Column1,0) FROM YourTable
或者,您需要将值更新为0(如果为NULL),并保持值不变。它们在update语句中使用大小写。像这样
Update YourTable
SET Column1 = CASE WHEN Column1 IS NULL THEN 0 ELSE Column1 END,
Column2 = CASE WHEN Column2 IS NULL THEN 0 ELSE Column2 END
对于其余的列,依此类推。或者这也是可能的
Update YourTable
SET Column1 = ISNULL(Column1,0),
cOLUMN2 = ISNULL(Column2,0)
更新表
设置column1=合并column1,0。。。。
您可以使用类似的方法。 它很优雅,但会更新表中的所有列。巨大的表可能会杀死服务器
DECLARE @TableName sysname = 'tablename'
Declare @UptQuery varchar(max)
Select @UptQuery = stuff(T.X.query('name').value('.', 'varchar(max)'), 1, 1, '')
from
(Select ','+name + '=ISNULL('+name+', 0)' name from
sys.columns where object_id = object_id(@TableName) for xml path(''), type) T(X)
exec ('Update ' + @TableName + ' set ' + @UptQuery)
旧答案
它将遍历表的所有列,如果为null,则使用0更新所有内容。它有很多更新,我认为从一开始就正确地设计表更好
DECLARE @TableName sysname = 'tablename'
Declare @ColName sysname
Select name into #temp from sys.columns where object_id = object_id(@TableName)
while(0 < (Select count(1) from #temp))
BEGIN
SET ROWCOUNT 1
Select @ColName = name from #temp
SET ROWCOUNT 0
exec('Update ' + @TableName + ' set ' + @ColName + ' = ISNULL('+@ColName+', 0) where ' + @ColName + ' is null')
delete #temp where name = @ColName
END
更新表集合ColumnName1=0,其中ColumnName1为空
…在这些列上为值0添加默认约束。我已经插入了空数据。我有19个实数列,因此需要编写19个时间大小写。请尝试最后一个,而不是Column1=ISNULLColumm1,0I宁愿使用COALESCE而不是ISNULL,因为它是ANSI SQL和可移植的。这是一个老问题。但是您确定所有列都是数字数据类型吗?为什么不只构建一个查询并执行post循环呢。这将是缓慢的,因为hellI已经添加了一个更好的方法,它首先不需要循环。应该更有效。冰,非常聪明。把一个答案标记为已接受不是很好,然后回答你自己的问题并将其标记为正确答案。
declare @tableName varchar(30)
set @tableName='MyTable'
DECLARE @MakeString AS NVARCHAR(MAX)
SELECT @MakeString=
(SELECT cname + ',' AS 'data()'
FROM ( select COLUMN_NAME +'= isnull(['+COLUMN_NAME+'],0)' as cname from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName
) as ccc
FOR XML PATH(''))
SET @MakeString = LEFT(@MakeString, LEN(@MakeString) - 1)
DECLARE @Sql AS NVARCHAR(MAX)
set @Sql='Update '+@tableName+'
SET '+@MakeString+''
EXEC(@Sql);