복붙노트

[SQL] 특정 테이블을 참조하는 모든 저장 프로 시저를 식별하는 방법

SQL

특정 테이블을 참조하는 모든 저장 프로 시저를 식별하는 방법

나는 목적을 테스트하기위한 개발 환경에 테이블을 생성하고이 테이블을 refreing하는 몇 SP의의가있다. 지금은 물론이 테이블을 참조하는 모든 SP의의를 식별이 표를 삭제해야했다. 나는 모든 SP의 목록을 찾아 어려움에 직면하고있다. 테이블 이름은 'X'이고 데이터베이스가 SQL 서버 2005이라고 가정하여 일부 쿼리를 제안하십시오.

해결법

  1. ==============================

    1.

    SELECT Name
    FROM sys.procedures
    WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
    

    BTW - 여기에 질문의 유형에 대한 유용한 자원이다 : SQL Server 시스템 카탈로그 FAQ를 쿼리

  2. ==============================

    2.SQL2008에 이상 다음 작품. 저장 프로 시저 및 함수 모두의 목록을 제공합니다.

    SQL2008에 이상 다음 작품. 저장 프로 시저 및 함수 모두의 목록을 제공합니다.

    select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
      from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                    inner join sys.objects sp on sd.referencing_id = sp.object_id
                        and sp.type in ('P', 'FN')
      where o.name = 'YourTableName'
      order by sp.Name
    
  3. ==============================

    3.때때로 위의 쿼리가 올바른 결과를 제공하지 않습니다, 같은 테이블 종속성을 취득 할 수 저장 프로 시저가 내장되어 있습니다 :

    때때로 위의 쿼리가 올바른 결과를 제공하지 않습니다, 같은 테이블 종속성을 취득 할 수 저장 프로 시저가 내장되어 있습니다 :

    EXEC sp_depends @objname = N'TableName';
    
  4. ==============================

    4.비 쿼리 방법은 SQL Server Management Studio를 사용하는 것입니다.

    비 쿼리 방법은 SQL Server Management Studio를 사용하는 것입니다.

    테이블을 마우스 오른쪽 클릭을 찾아 "보기 의존성"을 선택합니다.

    편집하다

    덧글 말한대로하지만, 그것은 매우 신뢰할 수 없습니다.

  5. ==============================

    5.다음 쿼리는 모든 저장 프로 시저의 이름과 그 SP 년대의 해당 정의를 가져옵니다

    다음 쿼리는 모든 저장 프로 시저의 이름과 그 SP 년대의 해당 정의를 가져옵니다

    select 
       so.name, 
       text 
    from 
       sysobjects so, 
       syscomments sc 
    where 
       so.id = sc.id 
       and UPPER(text) like '%<TABLE NAME>%'
    
  6. ==============================

    6.

    SELECT
        o.name
    FROM
        sys.sql_modules sm
    INNER JOIN sys.objects o ON
        o.object_id = sm.object_id
    WHERE
        sm.definition LIKE '%<table name>%'
    

    그냥 테이블 이름이 코멘트에 어디서 테이블 이름이 사용되는 다른 테이블 이름의 문자열입니다 곳도의 SP를 올려 것을 명심하십시오. 당신이 "테스트"와 "test_2"라는 이름의 테이블이 있고 "테스트"와 SP를 검색하려고하면 예를 들어, 당신은 모두 결과를 얻을 수 있습니다.

  7. ==============================

    7.열에 사람들을 테이블에 종속성을 검색하고뿐만 아니라 작품 아래의 쿼리 :

    열에 사람들을 테이블에 종속성을 검색하고뿐만 아니라 작품 아래의 쿼리 :

    EXEC sp_depends @objname = N'TableName';
    

    당신 종속성 모든 종류의, 그것은 어떤 일을 놓치지 않는 검색 할 경우, 다음 쿼리는 최선의 방법입니다. 실제로 필요한 것보다 더 많은 정보를 제공합니다.

     select distinct
            so.name
            --, text 
      from 
           sysobjects so, 
           syscomments sc 
      where 
         so.id = sc.id 
         and lower(text) like '%organizationtypeid%'
      order by so.name
    
  8. ==============================

    8.

    SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
    object_definition(OBJECT_ID)
    FROM sys.Procedures
    WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'
    
    GO
    

    당신이 테이블 이름을 언급해야하는 경우이 작동합니다.

  9. ==============================

    9.관리 스튜디오에서 당신은 바로 테이블을 클릭하고 '보기 종속성'에 클릭

    관리 스튜디오에서 당신은 바로 테이블을 클릭하고 '보기 종속성'에 클릭

    당신은 당신의 테이블 종속성이 객체의 목록을 볼 수있는 것보다 :

  10. ==============================

    10.당신은 기본적으로 2 가지 옵션이 있습니다 :

    당신은 기본적으로 2 가지 옵션이 있습니다 :

    ----옵션 1

    SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%tablename%'
    

    ---- 옵션 2

    SELECT DISTINCT o.name, o.xtype
    FROM syscomments c
    INNER JOIN sysobjects o ON c.id=o.id
    WHERE c.TEXT LIKE '%tablename%'
    

    이 두 쿼리는 당신에게 당신이 원하는 테이블을 참조하는 모든 저장 프로 시저를 받게됩니다. 이 쿼리는 sysobjects의 및 한 syscomments있는 2 SYS 테이블에 의존합니다. 당신의 DB의 모든 오브젝트 이름이 저장 프로 시저가 포함되어 저장되는 곳을 sysobjects입니다.

    했고 syscomments은 절차의 모든 텍스트가 포함되어 있습니다.

    당신이 쿼리 경우 : syscomments의 SELECT * FROM

    당신은 마지막 열로 저장 프로 시저에 포함 된 텍스트와 sysobjects의 테이블에 매핑 ID를 포함하는 테이블을해야합니다.

  11. ==============================

    11.이 시도

    이 시도

       SELECT DISTINCT so.name
        FROM syscomments sc
        INNER JOIN sysobjects so ON sc.id=so.id
        WHERE sc.TEXT LIKE '%your table name%'
    
  12. from https://stackoverflow.com/questions/7272157/how-to-identify-all-stored-procedures-referring-a-particular-table by cc-by-sa and MIT license