Convertir en blanco a NULL para una tabla
Frecuentes
Visto 3,424 veces
0
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.
4 Respuestas
3
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
2
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
1
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
1
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 sql-server sql-server-2008 or haz tu propia pregunta.
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.bEste es el script de mi esquema. CREAR ESQUEMA [WorkTables] AUTORIZACIÓN [dbo] - De cero a infinito