Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
receiver
Member

Откуда:
Сообщений: 269
Как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio?

Вижу сотни процедур и функций. Нужно найти в каких из них встречается строка "> FIRST_DATE".
Как это сделать? В имеющихся меню ответа не углядел.
10 дек 13, 12:33    [15270199]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
Crimean
Member

Откуда:
Сообщений: 13148
грубо, но, обычно, эффективно

select distinct object_name( id ) from syscomments where text like '%ваш код%'
10 дек 13, 12:34    [15270218]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
SELECT OBJECT_SCHEMA_NAME(object_id) AS [Schema], OBJECT_NAME(object_id) AS [Object] FROM
                       sys.sql_modules AS S WHERE S.definition LIKE '%search pattern%'
10 дек 13, 12:38    [15270248]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
receiver
Member

Откуда:
Сообщений: 269
Спасибо, это "оно"!
10 дек 13, 12:47    [15270357]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
receiver,

SELECT name
FROM sysobjects
WHERE type='P' AND OBJECT_DEFINITION(object_id) LIKE N'%> FIRST[_]DATE%';
10 дек 13, 12:50    [15270395]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
Valera Kochemasov
Member

Откуда: Moscow
Сообщений: 19
--==--
pDropProc pFind
go
--131218 valkoch at gmail com
--Поиск
create proc pFind
@vFind varchar(max),
@iItem int=1
as set nocount on begin try
--
declare @objs table (ID int, name sysname, type sysname, Ord int identity)
insert @objs select ID, name, type from
(
select ID, name, type,
case type
when 'V' then 0
when 'P' then 1
when 'IF' then 2
when 'TF' then 3
when 'FN' then 3
else 4
end Ord from
(
select Obj.ID, name, type from sys.syscomments Cmm join sys.sysobjects Obj on Cmm.ID=Obj.ID where text like '%'+@vFind+'%'
) Qry
group by ID, type, name
) Qry
order by Ord

select * from @objs

declare @temp table (txt varchar(max), ID int identity)
insert @temp select text from sys.syscomments where id=(select ID from @objs where Ord=@iItem)

declare @int int select @int=min(ID) from @temp
declare @max int select @max=max(ID) from @temp
declare @vText varchar(max) set @vText=''
while @int<=@max
begin
select @vText=@vText+txt from @temp where ID=@int
set @int=@int+1
end
print @vText
--
end try begin catch select error_message() end catch
go

--example
exec pFind 'declare', 1
18 дек 13, 20:45    [15313833]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
iap
receiver,

SELECT name
FROM sysobjects
WHERE type='P' AND OBJECT_DEFINITION(object_id) LIKE N'%> FIRST[_]DATE%';
Точку пропустил:
SELECT name
FROM sys.objects
WHERE type='P' AND OBJECT_DEFINITION(object_id) LIKE N'%> FIRST[_]DATE%';
18 дек 13, 20:47    [15313842]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
Valera Kochemasov
Member

Откуда: Moscow
Сообщений: 19
малёк поточнее:
if exists(select * from sys.objects where name='pFindText') drop proc pFindText
go
create proc pFindText
@vFind varchar(max),
@iItem int=1
as set nocount on begin try
--
declare @objs table (ID int, name sysname, type sysname, Ord int identity)
insert  @objs select ID, name, type from
 (
  select ID, name, type,
   case type 
    when 'V'  then 0
    when 'P'  then 1
    when 'IF' then 2 
    when 'TF' then 3
    when 'FN' then 3
              else 4
   end Ord from 
   (
    select Obj.ID, name, type from sys.syscomments Cmm join sys.sysobjects Obj on Cmm.ID=Obj.ID where text like '%'+@vFind+'%'
   ) Qry
     group by ID, type, name
 ) Qry
   order by Ord

select * from @objs

declare @temp table (txt varchar(max), ID int identity)
insert  @temp select text from sys.syscomments where id=(select ID from @objs where Ord=@iItem)

declare @int int select @int=min(ID) from @temp
declare @max int select @max=max(ID) from @temp
declare @vText varchar(max) set @vText=''
while @int<=@max
 begin
 select @vText=@vText+txt from @temp where ID=@int
 set @int=@int+1
 end
print @vText
--
end try begin catch select error_message() end catch
go

--example
exec pFindText 'declare', 1
go
18 дек 13, 20:55    [15313880]     Ответить | Цитировать Сообщить модератору
 Re: как найти строку в хранимых процедурах, отображенных в SQL Server Manager Studio  [new]
SQL Refactor Studio Team
Member

Откуда:
Сообщений: 84
Попробуйте наше творение.
Вводите текст, который хотите найти и получаете информацию в удобном виде.
Пример: Ищу в базе данных объекты, где встречается текст "1998"
Картинка с другого сайта.
19 дек 13, 05:37    [15314888]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить