Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ricerca di una stringa in tutte le colonne di tutte le tabelle del

4,987 views
Skip to first unread message

Pasqualino

unread,
May 17, 2010, 11:02:01 AM5/17/10
to
Salve,
qualcuno conosce una query che mi permetta di ricercare un dato in tutte le
colonne di tutte le tabelle di un database? Mi spiego:

- Ho un database con N tabelle
- Ogni tabella ha M colonne

Avrei bisogno di una query che mi permetta di cercare una stringa(ad
esempio) in tutte le M colonne di tutte le N tabelle del mio database!
Vagamente una query come questa (che però permette di trovare tutte le
colonne con un certo nome in un database):

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%YOUR_Column_NAME%'
ORDER BY schema_name, table_name;

Grazie

Luca Bianchi

unread,
May 17, 2010, 2:45:30 PM5/17/10
to
> Avrei bisogno di una query che mi permetta di cercare una stringa(ad
> esempio) in tutte le M colonne di tutte le N tabelle del mio database!

Un database è un sistema in grado di archiviare i dati secondo una certa
logica. Se questa logica viene meno equivale a scrivere una quantità di
informazioni in maniera casuale dove ritrovare quello che cerchi diventa un
lavoro certosino. Non so cosa ci possa essere alla base della tua richiesta
ma per uscirne dovrai armarti di quel lavoro certosino necessario a
soddisfare una simile esigenza e scriverti una serie di query su tutte le
tabelle del database avente come condizione la stringa che cerchi in or per
tutti i campi di ciascuna tabella.
Fortunatamente per te c'è qualcuno che non aveva nulla di meglio da fare che
pensare una cosa simile :-)

http://www.dbforums.com/microsoft-sql-server/972792-find-text-string-database.html

> Grazie

Bye

--
Luca Bianchi
Microsoft MVP - SQL Server


famigli...@gmail.com

unread,
Feb 4, 2019, 10:21:38 AM2/4/19
to
--non voglio ricevere informazioni sul numero di righe selezionate
Set NoCount On

--Dichiarazione variabile contenente la stringa da ritrovare
Declare @strToFind varchar(max) = 'serverml350'

--Dichiarazione variabili d'appoggio
Declare @strSchema sysname = ''
Declare @strTab sysname = ''
Declare @StrFieldsList varchar(Max) = ''
Declare @StrWhereFieldsList varchar(Max) = ''
Declare @strSql varchar(max) = ''

--variabile tabella contenente la le tabelle e i campi testuali
Declare @Tabs table(
TABLE_SCHEMA sysname
,TABLE_NAME sysname
)

Insert into @Tabs
Select Distinct TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.COLUMNS
Where DATA_TYPE in ('char','nchar','varchar','nvarchar')
Order by TABLE_SCHEMA,TABLE_NAME

--Fino a che ci sono righe nella variabile tabella
While 1=1
Begin

--operazioni preliminari per formattare la select di ricerca
Set @StrFieldsList = ''
Set @StrWhereFieldsList = ''

Select Top 1 @strSchema = TABLE_SCHEMA, @strTab=TABLE_NAME from @Tabs
Order by TABLE_SCHEMA,TABLE_NAME;

--Se la variabile tabella non mi ha restituito la prima riga esco dal ciclo
--perchè ho esaurito le tabelle su cui implementare la ricerca
IF @@ROWCOUNT=0
Break;

--Formatto la stringa per ricercare il mio dato
With Fields
AS
(
Select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
Where DATA_TYPE in ('char','nchar','varchar','nvarchar','text','ntext')
And TABLE_SCHEMA = @strSchema
And TABLE_NAME = @strTab
)
Select @StrFieldsList = @StrFieldsList + '' + QUOTENAME(COLUMN_NAME) + ' AS ' + QUOTENAME(COLUMN_NAME) + ',',
@StrWhereFieldsList = @StrWhereFieldsList + QUOTENAME(COLUMN_NAME) + ' Like ''%' + @strToFind + '%'' OR '
From Fields

Set @strSql = 'Select ''' + QUOTENAME(@strSchema) + ''' As Table_Schema,''' + QUOTENAME(@strTab) + ''' As Table_Name, ' + Substring(@StrFieldsList,0,LEN(@StrFieldsList))
+ ' from ' + QUOTENAME(@strSchema) + '.' + QUOTENAME(@strTab)
+ ' Where ' + Substring(@StrWhereFieldsList,0,LEN(@StrWhereFieldsList)-2)

--eseguo il comando di ricerca appena generato
Exec(@strSql)

-- elimino la riga relativa alla tabella appena elaborata
-- dalla tabella temporanea
Delete From @Tabs
Where TABLE_SCHEMA = @strSchema
And TABLE_NAME = @strTab

end

Message has been deleted
Message has been deleted
0 new messages