Saltar al contenido

Reemplazar celdas vacías con valores NULL en una gran cantidad de columnas

Solución:

Ejecute la siguiente consulta:

SELECT 'UPDATE yourtable SET ' + name + ' = NULL WHERE ' + name + ' = '''';'
FROM syscolumns
WHERE id = object_id('yourtable')
  AND isnullable = 1;

El resultado de esta consulta será un fragmento de script SQL como este:

UPDATE yourtable SET column1 = NULL WHERE column1 = '';
UPDATE yourtable SET column2 = NULL WHERE column2 = '';
UPDATE yourtable SET column3 = NULL WHERE column3 = '';
-- etc...

Copie y pegue ese script SQL en una nueva consulta y ejecútelo para actualizar todas sus columnas.

Podrías hacer una consulta sobre syscolumns para obtener una lista de columnas y usar los resultados para construir su consulta.

select quotename(name) + ' = nullif (' + quotename(name)+ ','''')'
from syscolumns 
where id = object_id('yourtable')

Además, si escribe su consulta como

update yourtable
set
    yourcolumn=nullif(yourcolumn, ''),
    yourcolumn2=nullif(yourcolumn2, ''),
    ...    

entonces puedes hacerlo en una sola consulta sin una cláusula where

De hecho, uso la respuesta de Robert N anterior a diario cuando estoy importando conjuntos de datos de archivos planos, por lo que lo coloco en un procedimiento almacenado al que podría pasar un nombre de tabla. Simplemente llena una tabla temporal con las declaraciones de actualización y luego ejecuta cada fila de la tabla.

    USE [master]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      LikeableBias
    -- Create date: 2016-06-27
    -- Description: Finds and NULLs all blank values in table where column allows nulls
    -- =============================================
    CREATE PROCEDURE [dbo].[sproc_NullBlanks] 
        @tablename NVARCHAR(MAX)
    AS
    BEGIN
        SET NOCOUNT ON;
    --------Insert update statements to temp table for execution
    DECLARE @statements TABLE (statement NVARCHAR(MAX))
    INSERT INTO @statements
            ( statement )
        SELECT ('UPDATE '[email protected]+' SET [' + name + '] = NULL WHERE ' + name + ' = '''';')
        FROM syscolumns
        WHERE id = OBJECT_ID(@tablename)
        AND isnullable = 1;
    --------Open cursor, execute statements, then close cursor
    DECLARE @statement NVARCHAR(MAX)
    DECLARE cur CURSOR LOCAL FOR
        SELECT statement FROM @statements
    OPEN cur
    FETCH NEXT FROM cur INTO @statement
    WHILE @@FETCH_STATUS = 0 BEGIN
        EXEC sys.sp_executesql @statement
        FETCH NEXT FROM cur INTO @statement
    END
    CLOSE cur
    DEALLOCATE cur

    END
    GO
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *