par , 19/02/2018 à 15h17 (1336 Affichages)
Voilà peu, j'avais créé la fonction trouvetout pour Oracle.
Voici son quasi-pendant pour Microsoft SQL Server.
Pour rappel : cette procédure permet de retrouve une chaîne de caractère quelconque dans la base en cours. Exécutant une recherche non-indexée sur de nombreuses colonnes, elle doit être employée avec modération, et pas sur des environnements de production !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| create procedure trouvetout (@chaine varchar(max))
as
begin
declare @taille_min int
declare @slike varchar(max)
declare @tbl sysname, @sch sysname, @col sysname
declare @sSQLDyn varchar(max)
declare @resultat int
set @taille_min=len(@chaine)
set @slike='%'+@chaine+'%'
declare c_table cursor for
select object_name(tb.object_id) TBL,schema_name(tb.schema_id) SCH , c.name col
from sys.tables tb
inner join sys.columns c on tb.object_id=c.object_id
inner join sys.types t on c.user_type_id=t.user_type_id
where c.max_length>=0--@taille_min
and tb.type_desc='USER_TABLE'
and t.collation_name is not null
create table #tbresultat (sch sysname, tbl sysname, col sysname, resultat int)
open c_table
fetch c_table into @tbl, @sch, @col
while @@FETCH_STATUS = 0
begin
select 'Traitement de '+@sch+'.'+@tbl+'.'+ @col
set @sSQLDyn = 'insert into #tbresultat select '''+@sch+''', '''+@tbl+''','''+@col+''', count(*) from '+ @sch + '.'+ @tbl +' where '+ @col +' LIKE '''+ @slike+''''
execute (@sSQLDyn )
fetch c_table into @tbl, @sch, @col
end
close c_table
deallocate c_table
select * from #tbresultat where resultat>0
end |