(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Поиск в текстовых полях всей базы в Microsoft SQL Server

Источник: gotdotnet

Недавно в организации, в которой я имею удовольствие работать, прошло мероприятие с нерусским названием - ребрендинг. Попросту - смена названия.

Для того, чтобы убедиться, что в момент смены наименования клиенты получат на руки правильные документы, встал вопрос - а где же в нашей базе данных хранится наименование организации вообще?

База данных существует уже больше 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 '%ЛЮТИК%'

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 03.02.2010 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft 365 Business Basic (corporate)
Microsoft 365 Business Standard (corporate)
Microsoft 365 Apps for business (corporate)
Microsoft Windows Professional 10, Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Новые материалы
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100