powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Плиз! срочно!
23 сообщений из 23, страница 1 из 1
Плиз! срочно!
    #32050051
Dao2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужен запрос по системным таблицам - как найти процедуры в тексте которых встечаеться определенный текс? Нет времени самому разобраться -плиз кинте готовый - горю по двум проектам.... -после долгого перерыва вернулся на sql 2000 :)) -соответственно sql2000
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050055
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select so.name from syscomments sc, sysobjects so where sc.text like '%mysearch%' and sc.id = so.id
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050056
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%MyText%'
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050060
Dao2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Спасаете от потопления! у GreenSunrise вернула 8 сторк у jimmers -5 ща бубу смотреть кто правильней оказался :))
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050067
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через INFORMATION_SCHEMA правильнее должно быть :-))
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050068
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант GreenSunrise правильный (только distinct добавить) в данном случае. Все из-за того, что в INFORMATION_SCHEMA.ROUTINES поле ROUTINE_DEFINITION nvarchar(4000), то есть для длинных процедур облом.


Удачи
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050077
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неа, jimmers, вы неправы. В syscomments поле text тоже имеет тип nvarchar(4000), там есть еще поле colid, в котором хранится порядковый номер для объектов со слишком длинным текстом. Насчет distinct - ну да :-)
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050089
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем не менее "облом" может наступить: если искомое слово будет разбито на две записи. Как это учесть я например не представляю. Правда вероятность небольшая
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050092
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper, а мысль прикольная... Это мне в голову не пришло. Попробовать, конечно, можно, но совсем уж простым запросом тут не обойдешься.
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050103
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчет криптованных процедур? ;-)
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050107
Dao2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так получается нашлись только те проц в которых искомая строка не разбита?
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050114
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и которые не криптованные...
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050122
Dao2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу как искать если разбита на две строки - общие соображения - без курсора не обойтись -открываем курсор - берем длину искомой подстроки -возвращаем из текуший записи эту длину с конца - берем следущую возвращаем длину с начала -полученные куски складываем и проверяем на вхождение -если есть то это наша искомая проц .... мож и придёться делать если всё таки на тестировании баги полезут - так вроде вернулось то что надо...
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050127
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕТ КУРСОРАМ!!!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @str varchar( 100 )
select @str = '%select%'

select distinct so.name 
from syscomments sc 
	join sysobjects so on so.id = sc.id
where sc.text like @str
union
select so.name
from syscomments sc
	join syscomments sc1 on sc1.id = sc.id and sc.colid =  sc.colid +  1 
	join sysobjects so on so.id = sc.id
where sc.colid &  1  =  0 
  and (right(sc.text,  2000 ) + left(sc1.text,  2000 )) like @str
union
select so.name
from syscomments sc
	join syscomments sc1 on sc1.id = sc.id and sc.colid =  sc.colid +  1 
	join sysobjects so on so.id = sc.id
where sc.colid &  1  =  1 
  and (right(sc.text,  2000 ) + left(sc1.text,  2000 )) like @str
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050129
dao2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот одну не отловила и даже последний запрос не помог :((
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050155
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2GreenSunrise:
Неа, jimmers, вы неправы. В syscomments поле text тоже имеет тип nvarchar(4000), там есть еще поле colid, в котором хранится порядковый номер для объектов со слишком длинным текстом.

В том-то и дело, что в syscomments тело процедуры может быть разбито части. Ваш запрос найдет те из них, которые
имеют искомую строку в области > 4000 символов...

Удачи
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050171
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вау. То есть в исходных таблицах (типа syscomments) все хранится целиком (пусть и разбитое на части, но можно вытянуть все), а в системной вьюхе будет выбрана только часть?! Это правда?
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050175
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, да....
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050177
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У MS еще не то можно встретить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
ALTER  view INFORMATION_SCHEMA.ROUTINES
	as
SELECT
	SPECIFIC_CATALOG			= db_name(),
	SPECIFIC_SCHEMA				= user_name(o.uid),
....
	IS_IMPLICITLY_INVOCABLE		= convert(nvarchar( 10 ),'NO'),
	CREATED						= o.crdate,
	LAST_ALTERED				= o.crdate
FROM
	sysobjects o LEFT OUTER JOIN 
		(syscolumns c JOIN master.dbo.spt_datatype_info spt_dtp
		ON c.xtype = spt_dtp.ss_dtype
			AND (spt_dtp.ODBCVer is null or spt_dtp.ODBCVer =  2 )
			AND (spt_dtp.AUTO_INCREMENT is null or spt_dtp.AUTO_INCREMENT =  0 )
		)
	ON (o.id = c.id AND c.number =  0  AND c.colid =  0 ),
	master.dbo.syscharsets		a_cha  --charset/1001, not sortorder.
 
where
	o.xtype IN ('P','FN','TF', 'IF')
	AND permissions(o.id) !=  0 
	AND	a_cha.id = isnull(convert(tinyint, CollationProperty(c.collation, 'sqlcharset')),
			convert(tinyint, ServerProperty('sqlcharset')))  -- make sure there's one and only one row selected for each column
 

Как Вам ЭТО -
CREATED = o.crdate, LAST_ALTERED = o.crdate
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050210
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот насчет LAST_ALTERED - все нормально, Представление это должно соответствовать SQL-92,
а сервер не хранит информацию о дате последнего изменения (по умолчанию, по крайней мере)...
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050224
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LAST_ALTERED - The last time the function was modified.
bol-Transact-SQL Reference-Information Schema Views
-ROUTINES
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32050226
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @str nvarchar( 2000 )  -- максимальная длина искомой сторки 2000
 
 -- если заменить на varchar можно увеличить до 4000 (в таблице тоже)
 
select @str = '%select%'
declare @tbl table (id int,number int,colid int,text nvarchar( 4000 ))
insert into @tbl
select so.id ,sc.number,sc.colid,sc.text
from sysobjects so 
	join syscomments sc on so.id = sc.id
where so.type='P'
insert into @tbl
select t1.id ,t1.number,t1.colid* 1000 ,datalength(RIGHT(t1.text, 2000 )+t2.text)
from @tbl t1 
     join (select * from @tbl where colid<> 1 ) t2 on (t1.id=t2.id and t1.number=t2.number and t1.colid=t2.colid+ 1 )
select *
from @tbl t 
where text like @str
...
Рейтинг: 0 / 0
Плиз! срочно!
    #32071426
BigVovch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один вариант ;-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare	@pattern	varchar( 4000 )

select	@pattern	=	'%select%'

select	so.name
from	sysobjects	so	(NOLOCK),
	syscomments	sc1	(NOLOCK)
		left	outer	join	syscomments	sc2	(NOLOCK)
			on	sc1.id		=	sc2.id
			and	sc1.colid+ 1 	=	sc2.colid
where	so.id	=	sc1.id
and	(
		sc1.text	like	@pattern
	or
		isNull( convert(varchar( 2000 ), left(sc1.text, 2000 )),'')	+
		isNull( convert(varchar( 2000 ), right(sc2.text, 2000 )),'')
		like	@pattern
	)
group	by	so.name
order	by	so.name
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Плиз! срочно!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]