Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > microsoft.public.it.sql > #7911
| Newsgroups | microsoft.public.it.sql |
|---|---|
| Date | 2019-02-04 07:21 -0800 |
| References | <54F6B0D0-FC52-44A3-93F4-079C5290478C@microsoft.com> |
| Message-ID | <7f556e27-c44e-4f41-a633-e24e51a6647e@googlegroups.com> (permalink) |
| Subject | Re: Ricerca di una stringa in tutte le colonne di tutte le tabelle del |
| From | famigliagaspari@gmail.com |
Il giorno lunedì 17 maggio 2010 17:02:01 UTC+2, Pasqualino ha scritto:
> 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
--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
Back to microsoft.public.it.sql | Previous | Next | Find similar
Re: Ricerca di una stringa in tutte le colonne di tutte le tabelle del famigliagaspari@gmail.com - 2019-02-04 07:21 -0800
csiph-web