Buscar un registro en cualquier columna de una tabla de la base de datos con SQL
Quieres buscar una palabra en una tabla pero no sabes en qué columna está? Aquí una solución eficiente 👨‍💻🔥

En este artículo, el último del 2023, te mostraré un query muy útil si trabajas con SQL Server.

Seguro en algún momento habrás intentado buscar si un valor existe en una tabla, pero no quieres ir columna por columna verificando si existe el valor o el registro, sino que quieres que lo busque en todas las columnas de tu tabla.

Esto es especialmente útil cuando no estás seguro de dónde buscar, tú simplemente quieres que te muestre los registros que contienen esa cadena o texto que estás buscando.

Pues bien aquí viene el query!

DECLARE @stringToFind VARCHAR(100) = 'ANA%'
DECLARE @table varchar(80) = 'SOCIO'

BEGIN TRY
   DECLARE @sqlCommand varchar(max) = 'SELECT * FROM [' + @table + '] WHERE ' 
	   
   SELECT @sqlCommand = @sqlCommand + '[' + COLUMN_NAME + '] LIKE ''' + @stringToFind + ''' OR '
   FROM INFORMATION_SCHEMA.COLUMNS 
   WHERE --TABLE_SCHEMA = @schema AND
   TABLE_NAME = @table
   AND DATA_TYPE IN ('char','nchar','ntext','nvarchar','text','varchar','int','decimal')
   SET @sqlCommand = left(@sqlCommand,len(@sqlCommand)-3)
   EXEC (@sqlCommand)
   PRINT @sqlCommand
END TRY

BEGIN CATCH 
   PRINT 'Hubo un error, verifica los parámetros ingresados'
   PRINT error_message()
END CATCH 

En este ejemplo quiero que me busque la cadena "Ana" en la tabla llamada "SOCIO"

Si pones una tabla que no existe, recibirás el siguiente mensaje:

Esto te ahorrará mucho tiempo, porque si quisieras buscar una cadena en toda la tabla, tendrías que ir columna por columna armando tu query, gastando mucho tiempo.

Nota cómo en la cadena puedes hacer uso del comodín % para indicarle que puede contener cualquier cosa antes o después de tu palabra a buscar.

Foto de Nik en Unsplash

Si esta entrada te ha servido o conocer a alguien que le pueda servir, no dudes en compartirla!

Créditos de la foto de portada: Foto de Tim Mossholder en Unsplash

Deja una respuesta

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