如何将表中的所有空字符串字段更新为null?

时间:2010-12-13 12:53:19

标签: sql-server-2005 null sql

我有一个包含15列的表(其中10列是字符串值)和大约50000行 它包含很多空字符串值...我搜索是否有一个查询,我可以为它传递一个表名来迭代所有值,如果它等于空,则将其更新为NULL ..

2 个答案:

答案 0 :(得分:3)

UPDATE mytable
   SET col1 = NULLIF(col1, ''),
       col2 = NULLIF(col2, ''),
       ...

答案 1 :(得分:2)

这是一种基于表格的简单方法。只需传递proc表名。你也可以让一个姐妹proc循环思考表名,并在while循环中调用这个proc来处理循环逻辑中的每个表。

CREATE PROC setNullFields 
(@TableName NVARCHAR(100))        
AS    

CREATE TABLE #FieldNames    
(    
pk INT IDENTITY(1, 1) ,    
Field NVARCHAR(1000) NULL    
);    

INSERT INTO #FieldNames    
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 

DECLARE @maxPK INT;    
SELECT @maxPK = MAX(PK) FROM #FieldNames    

DECLARE @pk INT;    
SET @pk = 1    

DECLARE @dynSQL NVARCHAR(1000) 

WHILE @pk <= @maxPK    
BEGIN    

 DECLARE @CurrFieldName NVARCHAR(100);    
 SET @CurrFieldName = (SELECT Field FROM #FieldNames WHERE PK = @pk)    

    -- update the field to null here:

    SET @dynSQL = 'UPDATE ' + @TableName + ' SET ' + @CurrFieldName + ' = NULLIF('+ @CurrFieldName+ ', '''' )' 
    EXEC (@dynSQL)

 SELECT @pk = @pk + 1    
END