Busqueda de una cadena de caracteres en una BD

16/05/2007 - 00:52 por Duvan | Informe spam
Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
tablas en todos los campos, alguien sabe como hacerlo?

De antemano muchas gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
16/05/2007 - 03:51 | Informe spam
Puedes escribir un procedimiento almacenado que recorra cada columna de
cada tabla. Posiblemente un cursor sea el camino fácil, asumo que es una
tarea para hacer una única vez y por alguna razón patológica que
requiera lo que quieres hacer.

Para conocer los nombres de todas las tablas usa la vista
INFORMATION_SCHEMA.Tables.

Para conocer los nombres de todas las columnas de una tabla, usa la
vista INFORMATION_SCHEMA.Columns.

Una vez que tienes una columna C de una tabla T, usa dinámicamente una
consulta: SELECT C FROM T WHERE C = 'palabrabuscada'


Tal vez antes de seguir para adelante podrías contarnos un poco más por
qué quieres hacer ese proceso tan digamos, sin animos de ofender,
extraño?

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.


In article ,
says...
Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
tablas en todos los campos, alguien sabe como hacerlo?

De antemano muchas gracias por su ayuda.

Respuesta Responder a este mensaje
#2 Duvan
16/05/2007 - 16:04 | Informe spam
Hola Gustavo lo que te entiendo que tu me explicas es buscar la palabra pero
que corresponda a un campo dado en una tabla, pero la palabra que necesito
buscar no es de un campo si no el contenido de ese campo.

"Gustavo Larriera (MVP)" wrote:

Puedes escribir un procedimiento almacenado que recorra cada columna de
cada tabla. Posiblemente un cursor sea el camino fácil, asumo que es una
tarea para hacer una única vez y por alguna razón patológica que
requiera lo que quieres hacer.

Para conocer los nombres de todas las tablas usa la vista
INFORMATION_SCHEMA.Tables.

Para conocer los nombres de todas las columnas de una tabla, usa la
vista INFORMATION_SCHEMA.Columns.

Una vez que tienes una columna C de una tabla T, usa dinámicamente una
consulta: SELECT C FROM T WHERE C = 'palabrabuscada'


Tal vez antes de seguir para adelante podrías contarnos un poco más por
qué quieres hacer ese proceso tan digamos, sin animos de ofender,
extraño?

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.


In article ,
says...
> Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
> Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
> ( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
> tablas en todos los campos, alguien sabe como hacerlo?
>
> De antemano muchas gracias por su ayuda.
>


Respuesta Responder a este mensaje
#3 Gustavo Larriera (MVP)
16/05/2007 - 18:03 | Informe spam
Pues eso es exactamente lo que te he respondido :-)

El SELECT que escribí busca dentro del contenido de un campo llamado C.

Gustavo Larriera, MVP
https://mvp.support.microsoft.com/p...o.Larriera
http://blogs.solidq.com/ES/glarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Duvan" wrote:

Hola Gustavo lo que te entiendo que tu me explicas es buscar la palabra pero
que corresponda a un campo dado en una tabla, pero la palabra que necesito
buscar no es de un campo si no el contenido de ese campo.

"Gustavo Larriera (MVP)" wrote:

> Puedes escribir un procedimiento almacenado que recorra cada columna de
> cada tabla. Posiblemente un cursor sea el camino fácil, asumo que es una
> tarea para hacer una única vez y por alguna razón patológica que
> requiera lo que quieres hacer.
>
> Para conocer los nombres de todas las tablas usa la vista
> INFORMATION_SCHEMA.Tables.
>
> Para conocer los nombres de todas las columnas de una tabla, usa la
> vista INFORMATION_SCHEMA.Columns.
>
> Una vez que tienes una columna C de una tabla T, usa dinámicamente una
> consulta: SELECT C FROM T WHERE C = 'palabrabuscada'
>
>
> Tal vez antes de seguir para adelante podrías contarnos un poco más por
> qué quieres hacer ese proceso tan digamos, sin animos de ofender,
> extraño?
>
> Gustavo Larriera, MVP
> Solid Quality
> Blog: http://blogs.solidq.com/ES/glarriera
> MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase
> / This message is provided "AS IS" with no warranties expressed or
> implied, and confers no rights.
>
>
> In article ,
> says...
> > Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
> > Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
> > ( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
> > tablas en todos los campos, alguien sabe como hacerlo?
> >
> > De antemano muchas gracias por su ayuda.
> >
>
>
Respuesta Responder a este mensaje
#4 Isaias
16/05/2007 - 18:20 | Informe spam
Duvan / Gustavo

No tengo los creditos de este store, pero creo que es lo que necesita Duvan:

Create this procedure in the required database and here is how you run it:

"Computer"
EXEC SearchAllTables 'Computer'
GO

Here is the complete stored procedure code:


CREATE PROC SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN



CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2
nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)

WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName (
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)

IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' +
@ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END

SELECT ColumnName, ColumnValue FROM #Results
END

Saludos
IIslas


"Duvan" wrote:

Hola Gustavo lo que te entiendo que tu me explicas es buscar la palabra pero
que corresponda a un campo dado en una tabla, pero la palabra que necesito
buscar no es de un campo si no el contenido de ese campo.

"Gustavo Larriera (MVP)" wrote:

> Puedes escribir un procedimiento almacenado que recorra cada columna de
> cada tabla. Posiblemente un cursor sea el camino fácil, asumo que es una
> tarea para hacer una única vez y por alguna razón patológica que
> requiera lo que quieres hacer.
>
> Para conocer los nombres de todas las tablas usa la vista
> INFORMATION_SCHEMA.Tables.
>
> Para conocer los nombres de todas las columnas de una tabla, usa la
> vista INFORMATION_SCHEMA.Columns.
>
> Una vez que tienes una columna C de una tabla T, usa dinámicamente una
> consulta: SELECT C FROM T WHERE C = 'palabrabuscada'
>
>
> Tal vez antes de seguir para adelante podrías contarnos un poco más por
> qué quieres hacer ese proceso tan digamos, sin animos de ofender,
> extraño?
>
> Gustavo Larriera, MVP
> Solid Quality
> Blog: http://blogs.solidq.com/ES/glarriera
> MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase
> / This message is provided "AS IS" with no warranties expressed or
> implied, and confers no rights.
>
>
> In article ,
> says...
> > Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
> > Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
> > ( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
> > tablas en todos los campos, alguien sabe como hacerlo?
> >
> > De antemano muchas gracias por su ayuda.
> >
>
>
Respuesta Responder a este mensaje
#5 Isaias
16/05/2007 - 19:29 | Informe spam
Bueno, los creditos estan insertos en el store.


Saludos
IIslas


"Isaias" wrote:

Duvan / Gustavo

No tengo los creditos de este store, pero creo que es lo que necesita Duvan:

Create this procedure in the required database and here is how you run it:

"Computer"
EXEC SearchAllTables 'Computer'
GO

Here is the complete stored procedure code:


CREATE PROC SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN



CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2
nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)

WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName > (
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)

IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' +
@ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END

SELECT ColumnName, ColumnValue FROM #Results
END

Saludos
IIslas


"Duvan" wrote:

> Hola Gustavo lo que te entiendo que tu me explicas es buscar la palabra pero
> que corresponda a un campo dado en una tabla, pero la palabra que necesito
> buscar no es de un campo si no el contenido de ese campo.
>
> "Gustavo Larriera (MVP)" wrote:
>
> > Puedes escribir un procedimiento almacenado que recorra cada columna de
> > cada tabla. Posiblemente un cursor sea el camino fácil, asumo que es una
> > tarea para hacer una única vez y por alguna razón patológica que
> > requiera lo que quieres hacer.
> >
> > Para conocer los nombres de todas las tablas usa la vista
> > INFORMATION_SCHEMA.Tables.
> >
> > Para conocer los nombres de todas las columnas de una tabla, usa la
> > vista INFORMATION_SCHEMA.Columns.
> >
> > Una vez que tienes una columna C de una tabla T, usa dinámicamente una
> > consulta: SELECT C FROM T WHERE C = 'palabrabuscada'
> >
> >
> > Tal vez antes de seguir para adelante podrías contarnos un poco más por
> > qué quieres hacer ese proceso tan digamos, sin animos de ofender,
> > extraño?
> >
> > Gustavo Larriera, MVP
> > Solid Quality
> > Blog: http://blogs.solidq.com/ES/glarriera
> > MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
> > Este mensaje se proporciona tal como es, sin garantías de ninguna clase
> > / This message is provided "AS IS" with no warranties expressed or
> > implied, and confers no rights.
> >
> >
> > In article ,
> > says...
> > > Hola a todos requiero de su ayuda para la siguiente labor tengo una Base de
> > > Datos con 700 tablas y debo realizar una busqueda de una cadena de caracteres
> > > ( basicamente una palabra ) dentro de esa Base de Datos en cada una de las
> > > tablas en todos los campos, alguien sabe como hacerlo?
> > >
> > > De antemano muchas gracias por su ayuda.
> > >
> >
> >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida