Microsoft SQL Server
Скрипты
T-SQL

Поиск фрагмента строки во всех таблицах

Опубликовано: 30 ноя 06
Рейтинг:

Автор: Stimo
Прислал: Stimo

Я, для удобства, написал программку на основе нижеприведённого запроса.
А так - можно просто выполнять запрос, задав значение для переменной @substr.

set nocount on
declare @name varchar(128), @substr nvarchar(4000), @column varchar(128)
set @substr = '%Василий%' --фрагмент строки, который будем искать

create table #rslt 
(table_name varchar(128), field_name varchar(128), value ntext)

declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name
open s
fetch next from s into @name
while @@fetch_status = 0
begin
 declare c cursor for 
	select quotename(column_name) as column_name from information_schema.columns 
	  where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname') and table_name  = @name
 set @name = quotename(@name)
 open c
 fetch next from c into @column
 while @@fetch_status = 0
 begin
   print 'Processing table - ' + @name + ', column - ' + @column
   exec('insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', ' + @column + 
	' from' + @name + ' where ' + @column + ' like ''' + @substr + '''')
   fetch next from c into @column
 end
 close c
 deallocate c
 fetch next from s into @name
end
select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt
group by table_name, field_name
order by table_name, field_name
--Если нужно, можем отобразить все найденные значения
--select * from #rslt order by table_name, field_name
drop table #rslt
close s
deallocate s

Комментарии


  • Плюс переделал этот запрос под поиск в полях int: числовые коды ищет и выдает таблицу результатов замечательно!
    (table_name varchar(128), field_name varchar(128), value int)
    ...
    where data_type in ('int')
    ...

  • Спасибо! Очень понравился код.
    Если искать короткие фрагменты типа "СПО", то удобно раскоментить строку
    select * from #rslt order by table_name, field_name
    и запрос отобразит все результаты с этим фрагментом: "РаСПОрки стальные, СПОсобности, ТранСПОртная накладная, и т.п."

  • 04 апреля 2016, 00:37 Терегулов Артур

    два раза char и ни одного nchar

  • Охрененно

  • Спасибо !

  • Спасибо, теперь очень удобно искать строки.



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / Скрипты / T-SQL / Поиск фрагмента строки во всех таблицах