문제

100 개의 테이블과 저장된 절차가있는 거대한 데이터베이스가 있습니다. SQL Server 2005를 사용하여 주어진 테이블에서 삽입 또는 업데이트 작업을 수행하는 저장된 절차 목록을 얻을 수있는 방법은 어떻게해야합니까?

도움이 되었습니까?

해결책

select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

이렇게하면 특정 테이블에 대한 삽입 또는 업데이트가 포함 된 모든 저장된 프로 시저 내용 목록을 제공합니다 (쿼리를 분명히 조정할 수 있음). 또한 반환 된 레코드 세트의 여러 행에서 더 긴 절차가 끊어 지므로 결과를 통해 약간의 수동 체계를해야 할 수도 있습니다.

편집하다: SP 이름을 반환하도록 조정 된 쿼리. 또한 위의 쿼리는 SP뿐만 아니라 UDF를 반환합니다.

다른 팁

sys.sql_dependencies SPROC에 쿼리에 포함 된 테이블 및 열을 포함하여 종속성이있는 엔티티 목록이 있습니다. 보다 이 게시물 종속성을 얻는 쿼리의 예는 아래 코드 스 니펫은 저장 절차에 따라 테이블/열 종속성 목록을 얻습니다.

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'

sys.dm_sql_referencing_entities를 사용하십시오

sp_depends는 쓸모 없게됩니다.

MSDN 참조

저장된 프로 시저를 텍스트 파일로 내보낸 다음 간단한 검색을 사용해보십시오.

보다 진보 된 기술은 Regexp 검색을 사용하여 항목에서 모든 선택 및 삽입을 찾는 것입니다.

이것은 작동하는 것 같습니다 :

select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that's what this means

Vyaskn 웹 사이트에서 sp_search_code를 다운로드하면 데이터베이스 개체 내에서 텍스트를 찾을 수 있습니다.

http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm

SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name

이 링크 SP 검색의 리소스로 사용되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top