Как я могу обновить все пустые строковые поля в таблице, чтобы они были нулевыми? - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть таблица с 15 столбцами (10 из них являются строковыми значениями) и около 50000 строк.
Она содержит много пустых строковых значений ... Я ищу, если есть запрос, который я могу передать имя таблицычтобы он перебрал все значения и, если он равен пустому, обновите его до NULL ..

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010
UPDATE mytable
   SET col1 = NULLIF(col1, ''),
       col2 = NULLIF(col2, ''),
       ...
2 голосов
/ 14 декабря 2010

это простой способ сделать это на основе таблицы.просто передайте процессу имена таблиц.Вы также можете сделать родственный процесс для цикла имен таблиц мыслей и вызывать этот процесс внутри цикла while для работы с каждой таблицей в логике цикла.

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    
...