Saltar al contenido

SQL Server SELECT donde cualquier columna contiene ‘x’

Solución:

Puedes usar in:

SELECT *
FROM testing 
WHERE 'foo' in (col1, col2, col3, . . . );

Primer método (probado)
Primero obtenga la lista de columnas en la variable de cadena separadas por comas y luego puede buscar ‘foo’ usando esa variable mediante el uso de IN

Verifique el procedimiento almacenado a continuación, que primero obtiene columnas y luego busca una cadena:

DECLARE @TABLE_NAME VARCHAR(128)
DECLARE @SCHEMA_NAME VARCHAR(128)

-----------------------------------------------------------------------

-- Set up the name of the table here :
SET @TABLE_NAME = 'testing'
-- Set up the name of the schema here, or just leave set to 'dbo' :
SET @SCHEMA_NAME = 'dbo'

-----------------------------------------------------------------------

DECLARE @vvc_ColumnName VARCHAR(128)
DECLARE @vvc_ColumnList VARCHAR(MAX)

IF @SCHEMA_NAME =''
  BEGIN
  PRINT 'Error : No schema defined!'
  RETURN
  END

IF NOT EXISTS (SELECT * FROM sys.tables T JOIN sys.schemas S
      ON T.schema_id=S.schema_id
      WHERE [email protected]_NAME AND [email protected]_NAME)
  BEGIN
  PRINT 'Error : The table '''[email protected]_NAME+''' in schema '''+
      @SCHEMA_NAME+''' does not exist in this database!' 
  RETURN
 END

DECLARE TableCursor CURSOR FAST_FORWARD FOR
SELECT   CASE WHEN PATINDEX('% %',C.name) > 0 
     THEN '['+ C.name +']' 
     ELSE C.name 
     END
FROM     sys.columns C
JOIN     sys.tables T
ON       C.object_id  = T.object_id
JOIN     sys.schemas S
ON       S.schema_id  = T.schema_id
WHERE    T.name    = @TABLE_NAME
AND      S.name    = @SCHEMA_NAME
ORDER BY column_id


SET @vvc_ColumnList=""

OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName

WHILE @@FETCH_STATUS=0
  BEGIN
   SET @vvc_ColumnList = @vvc_ColumnList + @vvc_ColumnName

    -- get the details of the next column
   FETCH NEXT FROM TableCursor INTO @vvc_ColumnName

  -- add a comma if we are not at the end of the row
   IF @@FETCH_STATUS=0
    SET @vvc_ColumnList = @vvc_ColumnList + ','
   END

 CLOSE TableCursor
 DEALLOCATE TableCursor

-- Now search for `foo`


SELECT *
FROM testing 
WHERE 'foo' in (@vvc_ColumnList );

2do método
En el servidor SQL, puede obtener la identificación del objeto de la tabla y luego, con esa identificación del objeto, puede obtener columnas. En ese caso será como se muestra a continuación:

Paso 1: Primero obtenga el ID de objeto de la tabla

select * from sys.tables order by name    

Paso 2: Ahora obtenga columnas de su tabla y busque en ella:

 select * from testing where 'foo' in (select name from sys.columns  where  object_id =1977058079)

Nota: object_id es lo que obtiene en el primer paso para su tabla relevante

¡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 *