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!