| 
  | 
|||||||||||||||||||||||||||||
  | 
 Поиск в текстовых полях всей базы в Microsoft SQL ServerИсточник: gotdotnet 
Недавно в организации, в которой я имею удовольствие работать, прошло мероприятие с нерусским названием - ребрендинг. Попросту - смена названия. Для того, чтобы убедиться, что в момент смены наименования клиенты получат на руки правильные документы, встал вопрос - а где же в нашей базе данных хранится наименование организации вообще? База данных существует уже больше 10 лет и гарантировать, что это название записано только в "правильных" справочниках не мог никто. Посему был написан небольшой скрипт, который искал вхождение наименования во все текстовые поля всех таблиц. 01.set concat_null_yields_null on02.declare03.    @collist varchar(max),04.    @srch_sql varchar(max),05.    @schemaName varchar(128),06.    @tableName varchar(128)07. 08.declare curs cursor local static forward_only for09.    select distinct c.TABLE_SCHEMA, c.TABLE_NAME10.    from INFORMATION_SCHEMA.[COLUMNS] c11.    where c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text')12.    and c.CHARACTER_MAXIMUM_LENGTH >=413.    and objectproperty(object_id(c.TABLE_SCHEMA + '.'+ c.TABLE_NAME), 'IsUserTable ') = 114.    order by 1, 215.open curs16.while 1=117.begin18. 19.    fetch next fr om curs into @schemaName, @tableName20.    if @@FETCH_STATUS <> 0 break21. 22.-- Данную строку можно раскомментарить, если хочется видеть, в какой таблице идет поиск в данный момент 23.--  raiserror(';%s.%s', 10, 1, @schemaName, @tableName) with nowait24. 25.    select26.        @collist = null27.         28.    select29.        @collist = isnull(@collist + '30.    or ', '') +'upper(convert(varchar(8000), ' + c.COLUMN_NAME + ')) like ''%ЛЮТИК%''' -- Тут указываем, что и как ищем 31.    from INFORMATION_SCHEMA.[COLUMNS] c32.    where c.TABLE_SCHEMA = @schemaName33.    and c.TABLE_NAME = @tableName34.    and c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text')35.    and c.CHARACTER_MAXIMUM_LENGTH >=636.    set @srch_sql = 'if exists(select * from '+@schemaName+'.'+@tableName+' with(nolock) where '+@collist+')37.    raiserror('''+@schemaName+'.'+@tableName+' - found!'', 10, 1) with nowait'38.     39.    exec(@srch_sql)40.endС поиском текста в хранимых процедурах - еще проще: 1.select object_schema_name(sm.object_id)+'.'+object_name(sm.object_id), objectpropertyex(sm.[object_id], 'BaseType') 2.from sys.sql_modules sm3.where upper(sm.definition) like '%ЛЮТИК%'Ссылки по теме 
  | 
 | 
|||||||