SQL - Cuestión: Buscar 'string' en una BD SQL?? si/no?

 
Vista:

Cuestión: Buscar 'string' en una BD SQL?? si/no?

Publicado por JCarlos (10 intervenciones) el 05/07/2005 21:05:14
De lo simple a lo complejo....¿o a lo imposible?

Al grano: (dijo el dermatólogo)
La idea es simple, me llegó un archivo de texto plano, que se supone se generó (por un sistema externo) desde una base de datos X.

Actualmente tengo la base de datos X y tengo el archivo de texto con los datos.-
=====================================================================
¿Se puede realizar una búsqueda en toda la Base de Datos, para un 'string' cualquiera.?
=====================================================================
Por ejemplo suponer en string una cifra N='250000'. Cómo saber el origen del dato en la base de datos?.
Suponer que no existen referencias de tablas a las cuales podría pertenecer o algo así. El dato existe en la BD - es la única certeza.-

El caso sería similar al de un bibliotecario que sabe que tiene un libro, pero no sabe en que estante se encuentra.- Pensando que estamos en SQL-SERVER será mejor ¿o no..?

Saludos
Comentarios/dudas/aportes
Misma vía



Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cuestión: Buscar 'string' en una BD SQL?? si/

Publicado por Isaías Islas (5072 intervenciones) el 05/07/2005 23:34:12
Hola JCarlos, espero sirva el siguiente store, se ejecuta EXEC SearchAllTables '250000'

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

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT

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

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar