Решение:
Недавно в организации, в которой я имею удовольствие работать, прошло мероприятие с нерусским названием - ребрендинг. Попросту - смена названия. Для того, чтобы убедиться, что в момент смены наименования клиенты получат на руки правильные документы, встал вопрос - а где же в нашей базе данных хранится наименование организации вообще? База данных существует уже больше 10 лет и гарантировать, что это название записано только в "правильных" справочниках не мог никто. Посему был написан небольшой скрипт, который искал вхождение наименования во все текстовые поля всех таблиц. 01.set concat_null_yields_null on 02.declare 03.@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 for 09.select distinct c.TABLE_SCHEMA, c.TABLE_NAME 10.from INFORMATION_SCHEMA.[COLUMNS] c 11.where c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') 12.and c.CHARACTER_MAXIMUM_LENGTH >=4 13.and objectproperty(object_id(c.TABLE_SCHEMA + '.'+ c.TABLE_NAME), 'IsUserTable ') = 1 14.order by 1, 2 15.open curs 16.while 1=1 17.begin 18. 19.fetch next fr om curs into @schemaName, @tableName 20.if @@FETCH_STATUS <> 0 break 21. 22.-- Данную строку можно раскомментарить, если хочется видеть, в какой таблице идет поиск в данный момент 23.-- raiserror(';%s.%s', 10, 1, @schemaName, @tableName) with nowait 24. 25.select 26.@collist = null 27. 28.select 29.@collist = isnull(@collist + ' 30.or ', '') +'upper(convert(varchar(8000), ' + c.COLUMN_NAME + ')) like ''%ЛЮТИК%''' -- Тут указываем, что и как ищем 31.from INFORMATION_SCHEMA.[COLUMNS] c 32.where c.TABLE_SCHEMA = @schemaName 33.and c.TABLE_NAME = @tableName 34.and c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') 35.and c.CHARACTER_MAXIMUM_LENGTH >=6 36.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 sm 3.where upper(sm.definition) like '%ЛЮТИК%'
Периодически мы проводим обучение и даем возможность стажировки на базе нашей платформы с управлением на SQL. Если вам это интересно, то пожалуйста посмотрите информацию об обучении/стажировке по SQL.