Utilizzo le viste information_schema che restituiscono la struttura del Db.
Vediamo come ho fatto :
--non voglio ricevere informazioni sul numero di righe selezionate
Set NoCount On
--Dichiarazione variabile contenente la stringa da ritrovare
Declare @strToFind varchar(max) = 'Luca'
--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
bravissimo e grazie 1000 è proprio quello che cercavo
RispondiEliminacomplimenti!
Complimenti,ha funzionato anche per me
RispondiEliminaGrazie mille!