Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: регистрозависимый поиск текста  (Прочитано 10531 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« : 26-11-2008 13:22 » 

SQL Server2005. Возникла у меня забавная задачка.. Хранимые процедуры пишут в лог файлы некоторую информацию.  Проблема в том, что разный люд не всегда отслеживал регистр символов записываемой строки. Это оказалось важно (очень  :Улыбаюсь Строки шифруются потом...) Теперь у меня есть 450 процедур, в некоторых из них  строки записаны как
Код:
exec sys_log  'CSC', 'adr_ins_City', 'Transaction', '', 'Begin', '', @id_proc
, а в некоторых как
Код:
exec sys_log 'csc', 'adr_ins_City', 'Transaction', '', 'Begin', '', @id_proc
. И нужно бы в них всех заменить строчные буквы 'csc 'на прописные...
открыть, найти с учетом регистра и поменять ручками я, конечно, могу... а можно как-то автоматизировать процесс?
Есть следующая утилитка, весьма удобная...
Код:
create PROCEDURE [Утилиты: поиск текста в хранимых процедурах]
@SearchPattern nvarchar(128),
  @ExcludePattern nvarchar(128)
AS
BEGIN
set nocount on
 
  select
    rtrim(o.name) as 'Имя объекта',
    o.type as 'Тип объекта'
  from
    sys.all_objects o inner join sys.schemas u on u.schema_id = o.schema_id
    inner join sys.all_sql_modules c on c.object_id = o.object_id
  where
    u.name = N'dbo'
    and c.definition like '%' + @SearchPattern + '%'
    and c.definition not like IsNull(@ExcludePattern, '')
  order by
  o.type,
  o.name
END
Но она ищет без учета регистра... как модернизировать, сообразить не могу Жаль
« Последнее редактирование: 26-11-2008 13:23 от Arinyshka » Записан

Непонятная свобода обручем сдавила грудь...
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-11-2008 13:52 » 

Arinyshka, так и пусть ищет без учёта регистра, главное, на что заменять.

Если

CSC -> CSC
csc -> CSC

то и пусть.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #2 : 26-11-2008 14:39 » 

она же не заменяет Улыбаюсь Просто выдает мне список процедур, где встречается искомая строка - причем и CSC и csc.. результат - 450 хранимых. Каждую открыть, найти csc (если есть, в результат ведь входят и те, где  CSC), заменить... уж очень трудоемко. Если бы можно было ее модернизировать так, чтобы искала только строку со строчными символами...
Записан

Непонятная свобода обручем сдавила грудь...
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 26-11-2008 15:34 » 

create table t (
-- col nvarchar(100) collate SQL_Latin1_General_Cp437_CI_AS
-- col nvarchar(100) collate SQL_Latin1_General_Cp437_CS_AS
)

insert into t values ('aaa')
insert into t values ('AAA')


Если таблица создавалась
с раскомментаренной 1-й строкой, то
select * from t1 where col1 = 'aaa' вернет 2 строки,

с раскомментаренной 2-й строкой, то только одну.



упс... это для sql2000
« Последнее редактирование: 26-11-2008 15:36 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-12-2008 15:02 » 

В тему для справки для SQL Server 2000 запрос по текстам хранимок и триггеров в текущей БД будет примерно таким:

Код: (Text)
select distinct o.name, o.xtype
from
 sysobjects o inner join syscomments c on o.id = c.id
where
     (o.xtype = 'P' or o.xtype = 'TR')
 and c.text like @Pattern
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 11-12-2008 05:30 » 

Цитата
Но она ищет без учета регистра... как модернизировать, сообразить не могу

все зависит от настроек сервера
но если необходимо использовать другие настройки, то используют следующую конструкцию


...
and c.definition like '%' + @SearchPattern + '%' collate Cyrillic_General_CS_AS
...

ЗЫЖ
в названиии collation надо обращать внимание на Cyrillic_General_CS_AS
который может принимать значения:
CS (case sensetive) - регистр зависимый
CI (case ignore)- регистр не зависимый
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines