[sql-server] 모든 저장 프로 시저를 나열하는 쿼리

SQL Server 데이터베이스의 모든 저장 프로 시저 이름을 반환 할 수있는 쿼리

쿼리에서 시스템 저장 프로 시저를 제외 할 수 있으면 훨씬 도움이됩니다.



답변

Mike가 말했듯이 가장 좋은 방법은을 사용하는 것 information_schema입니다. master 데이터베이스에 있지 않으면 시스템 저장 프로 시저가 반환되지 않습니다.

SELECT *
  FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE = 'PROCEDURE'

어떤 이유로 master 데이터베이스에 비 시스템 저장 프로 시저가있는 경우 쿼리를 사용할 수 있습니다 (MOST 시스템 저장 프로 시저가 필터링 됨).

SELECT *
  FROM [master].INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE = 'PROCEDURE'
   AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')


답변

SELECT name,
       type
  FROM dbo.sysobjects
 WHERE (type = 'P')


답변

“바람직한”방법은 information_schema 테이블을 사용하는 것으로 이해합니다.

select *
  from information_schema.routines
 where routine_type = 'PROCEDURE'


답변

다음은 선택한 데이터베이스의 모든 절차를 반환합니다

SELECT * FROM sys.procedures


답변

이 쿼리를 사용하여 저장 프로 시저 및 함수를 얻을 수 있습니다.

SELECT name, type
FROM dbo.sysobjects
WHERE type IN (
    'P', -- stored procedures
    'FN', -- scalar functions 
    'IF', -- inline table-valued functions
    'TF' -- table-valued functions
)
ORDER BY type, name


답변

SQL Server 2005를 사용하는 경우 다음이 작동합니다.

select *
  from sys.procedures
 where is_ms_shipped = 0


답변

아래 쿼리 중 하나를 사용하여 하나의 데이터베이스에서 저장 프로 시저 목록을 찾을 수 있습니다.

Query1 :

    SELECT
        *
    FROM sys.procedures;

Query2 :

    SELECT
        *
    FROM information_schema.routines
    WHERE ROUTINE_TYPE = 'PROCEDURE' 

모든 데이터베이스에서 모든 SP 목록을 찾으려면 아래 쿼리를 사용할 수 있습니다.

    CREATE TABLE #ListOfSPs
    (
        DBName varchar(100),
        [OBJECT_ID] INT,
        SPName varchar(100)
    )

    EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures'

    SELECT
        *
    FROM #ListOfSPs