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


Удачи
...
Рейтинг: 0 / 0
12.09.2002, 14:18:16
    #32050077
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
Неа, jimmers, вы неправы. В syscomments поле text тоже имеет тип nvarchar(4000), там есть еще поле colid, в котором хранится порядковый номер для объектов со слишком длинным текстом. Насчет distinct - ну да :-)
...
Рейтинг: 0 / 0
12.09.2002, 14:33:15
    #32050089
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
Тем не менее "облом" может наступить: если искомое слово будет разбито на две записи. Как это учесть я например не представляю. Правда вероятность небольшая
...
Рейтинг: 0 / 0
12.09.2002, 14:37:48
    #32050092
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
SergSuper, а мысль прикольная... Это мне в голову не пришло. Попробовать, конечно, можно, но совсем уж простым запросом тут не обойдешься.
...
Рейтинг: 0 / 0
12.09.2002, 14:56:37
    #32050103
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
А как насчет криптованных процедур? ;-)
...
Рейтинг: 0 / 0
12.09.2002, 15:01:40
    #32050107
Dao2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
так получается нашлись только те проц в которых искомая строка не разбита?
...
Рейтинг: 0 / 0
12.09.2002, 15:08:09
    #32050114
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
и которые не криптованные...
...
Рейтинг: 0 / 0
12.09.2002, 15:21:55
    #32050122
Dao2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
По поводу как искать если разбита на две строки - общие соображения - без курсора не обойтись -открываем курсор - берем длину искомой подстроки -возвращаем из текуший записи эту длину с конца - берем следущую возвращаем длину с начала -полученные куски складываем и проверяем на вхождение -если есть то это наша искомая проц .... мож и придёться делать если всё таки на тестировании баги полезут - так вроде вернулось то что надо...
...
Рейтинг: 0 / 0
12.09.2002, 15:34:09
    #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
12.09.2002, 15:40:20
    #32050129
dao2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
Ну вот одну не отловила и даже последний запрос не помог :((
...
Рейтинг: 0 / 0
12.09.2002, 16:18:23
    #32050155
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
2GreenSunrise:
Неа, jimmers, вы неправы. В syscomments поле text тоже имеет тип nvarchar(4000), там есть еще поле colid, в котором хранится порядковый номер для объектов со слишком длинным текстом.

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

Удачи
...
Рейтинг: 0 / 0
12.09.2002, 16:28:44
    #32050171
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
Вау. То есть в исходных таблицах (типа syscomments) все хранится целиком (пусть и разбитое на части, но можно вытянуть все), а в системной вьюхе будет выбрана только часть?! Это правда?
...
Рейтинг: 0 / 0
12.09.2002, 16:31:28
    #32050175
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
К сожалению, да....
...
Рейтинг: 0 / 0
12.09.2002, 16:34:32
    #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
12.09.2002, 17:03:54
    #32050210
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
А вот насчет LAST_ALTERED - все нормально, Представление это должно соответствовать SQL-92,
а сервер не хранит информацию о дате последнего изменения (по умолчанию, по крайней мере)...
...
Рейтинг: 0 / 0
12.09.2002, 17:34:07
    #32050224
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плиз! срочно!
LAST_ALTERED - The last time the function was modified.
bol-Transact-SQL Reference-Information Schema Views
-ROUTINES
...
Рейтинг: 0 / 0
12.09.2002, 17:35:13
    #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
22.11.2002, 15:56:05
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Плиз! срочно! / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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