在我的表中,我有几列具有空白值。任何人都可以建议我一个查询,通过该查询,我可以将给定表的所有空格替换为NULL吗?
修改
如果我无法正确指定问题,我很抱歉,我不想在查询中提供列名称。我只有表名。因此,对于给定的表,我想检查所有列并将其空值转换为NULL。
答案 0 :(得分:3)
作为一种方法,下一个存储过程可能有所帮助:
CREATE PROCEDURE up_replaceBlanksByNulls
@schemaName nvarchar(50),
@tableName nvarchar(100)
AS
declare @query1 nvarchar(max) = ''
select @query1 = @query1 + 'UPDATE ' + @schemaName + '.' + @tableName + ' SET ' + c.COLUMN_NAME + ' = NULL WHERE ' +
c.COLUMN_NAME + ' = '''';' FROM INFORMATION_SCHEMA.COLUMNS c
WHERE C.TABLE_NAME = @tableName
EXECUTE sp_executesql @query1
GO
用法:
up_replaceBlanksByNulls 'dbo', 'myTable'
答案 1 :(得分:2)
要删除表格中的所有空白值:
CREATE PROCEDURE getRidOfBlanks
@tableName nvarchar(50)
AS
DECLARE @colName varchar(50)
DECLARE Table_Cursor CURSOR FOR
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='@tableName'
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @colName
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE @tableName SET @colName = NULL WHERE @colName = '';
FETCH NEXT FROM Table_Cursor INTO @colName
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
GO
要使用此功能,请使用我的代码创建过程,然后使用tableName执行它。
答案 2 :(得分:1)
只需使用UPDATE
,就像这样:
UPDATE myTable SET myColumn = NULL WHERE myColumn = '';
答案 3 :(得分:1)
如果您的列名中包含空格,则这是@ alex.b过程的一种更改。
CREATE PROCEDURE up_replaceBlanksByNulls
@schemaName nvarchar(50),
@tableName nvarchar(100)
AS
declare @query1 nvarchar(max) = ''
select @query1 = @query1 + 'UPDATE ' + @schemaName + '.' + @tableName + ' SET ' + case when c.COLUMN_NAME like '% %' then '[' + c.COLUMN_NAME + ']' Else c.COLUMN_NAME end + ' = NULL WHERE ' +
case when c.COLUMN_NAME like '% %' then '[' + c.COLUMN_NAME + ']' Else c.COLUMN_NAME end + ' = '''';' FROM INFORMATION_SCHEMA.COLUMNS c
WHERE C.TABLE_NAME = @tableName
print @query1
EXECUTE sp_executesql @query1
GO