Convertir en blanco a NULL para una tabla

En mi tabla tengo pocas columnas que tienen valores en blanco. ¿Alguien puede sugerirme una consulta mediante la cual pueda reemplazar todos los espacios en blanco a NULL para una tabla determinada?

EDITAR

Lo siento si no pude especificar mi pregunta correctamente, no quiero dar el nombre de la columna en mi consulta. Todo lo que tengo es el nombre de la tabla. Entonces, para una tabla dada, quiero verificar todas las columnas y convertir sus valores en blanco a NULL.

preguntado el 05 de septiembre de 12 a las 10:09

4 Respuestas

Como enfoque, el siguiente procedimiento almacenado podría ser de ayuda:

 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

Uso:

up_replaceBlanksByNulls 'dbo', 'myTable'

Respondido el 05 de Septiembre de 12 a las 11:09

No funcionó para mí. La consulta se ejecuta con éxito. he reemplazado miNombreDeTabla con mi tabla SQL. ¿Tengo que cambiar algo más aquí? - De cero a infinito

No recibo ningún error, se está ejecutando correctamente pero las columnas de la tabla no se actualizan con NULL. Cuando ejecuto la segunda consulta, siempre devuelve esta declaración. ((1 fila(s) afectada(s))*. Todavía ninguna de las filas modificada. Tengo tantos espacios en blanco en la tabla :-( - De cero a infinito

@Zerotoinfinite, algunas preguntas: ¿a qué esquema pertenece su tabla? Es implicit transactions apagado o encendido? - alex.b

@Zerotoinfinite, y una pregunta más: hace blank el valor significa una cadena completamente vacía - '', ¿o podría contener espacios en blanco o tabulaciones, o algo así? - alex.b

Este es el script de mi esquema. CREAR ESQUEMA [WorkTables] AUTORIZACIÓN [dbo] - De cero a infinito

Para deshacerse de todos los valores en blanco en una tabla:

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

Para usar esto, crea su procedimiento con mi código, luego lo ejecuta con su tableName.

Respondido el 05 de Septiembre de 12 a las 10:09

@lagrandmere Perdón por mi pregunta poco clara, verifique la parte de edición. Solo tengo el nombre de la mesa conmigo: De cero a infinito

@TimSchmelter editó mi respuesta para eliminar todos los valores en blanco de una tabla. - LaGrandMere

Extraño, pero recibo este error cuando estoy creando este SP Debe declarar la variable de tabla "@tableName". - De cero a infinito

@Zerotoinfinite Debe agregar el nombre de su tabla en lugar de @tableName. - Himanshu Jansari

@ hims056 Creo que entonces necesito codificar el nombre de la tabla. Bastante bueno para mi propósito, pero no se puede usar para el procedimiento almacenado. +1 - De cero a infinito

Simplemente usando UPDATE Me gusta esto:

UPDATE myTable SET myColumn = NULL WHERE myColumn = '';

Respondido el 05 de Septiembre de 12 a las 10:09

y con múltiples columnas como OP quiere ("pocas columnas")? - Tim Schmelter

@ hims056 Perdón por mi pregunta poco clara, verifique la parte de edición. Solo tengo el nombre de la mesa conmigo: De cero a infinito

Si los nombres de sus columnas tienen espacios en ellos, aquí hay una alteración del procedimiento @ 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

Respondido 16 Abr '19, 16:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.