2016-12-19 1 views
0

나는 데이터베이스 이름을 인수로 취하는 절차를 가지고 있으며이 데이터베이스 이름을 사용하여 테이블, 뷰, 트리거를 포함하여 모든 개체가 해당 정보를 찾는 데 도움이되는 참조를 얻도록해야합니다.특정 데이터베이스의 개체를 가져 오는 방법은 무엇입니까?

참고 : 사용하려고 시도했습니다 SELECT * FROM sys.obj하지만 모든 데이터베이스에서 전체 개체를 제공합니다. 특정 데이터베이스로 제한 할 수있는 방법

+1

동적 SQL을 사용해야합니다. 그리고 동적 SQL의 일부로 데이터베이스 이름을 포함시켜야합니다. "Select * from + @DBName +".sys.objects ... " –

+0

이 답변을 수정하면 다음과 같이 처리됩니다 : http://stackoverflow.com/a/18462734/2095534 –

답변

0

에서 언급 한 것과 같은 문을 실행했습니다. 그런 다음 내가 연결된 대상 만 얻고 있습니다. 따라서 특정 데이터베이스에 연결하려면 USE을 추가하십시오. 그리고 sys.objects 테이블을 누르십시오. 내가 NOT IN와 유형 SQ,S,IT의있는 행을 제거한

GO 
CREATE PROCEDURE PROC_GETALLOBJ 
(
@DB_NAME VARCHAR(20) 
) 
AS 
BEGIN 
    DECLARE @QRY VARCHAR(MAX); 

    SELECT @QRY = ' 
    USE ' [email protected]_NAME+' 

    SELECT * FROM SYS.objects WHERE [TYPE] NOT IN (''SQ'',''S'',''IT'')' 

    EXEC (@QRY) 

END 
GO 

처럼

그래서 SP가 될 것입니다. 너는 그들을 필요로하지 않을 수도 있기 때문에.

설명이 포함 된 유형 목록을 찾으십시오.

TR --TRIGGER

SQ --SERVICE_QUEUE

FN --SQL_SCALAR_FUNCTION

S --SYSTEM_TABLE

D --DEFAULT_CONSTRAINT

IT --INTERNAL_TABLE

F --FOREIGN_KEY_CONSTRAINT

PK --PRIMARY_KEY_CONSTRAINT

P --SQL_STORED_PROCEDURE

U --USER_TABLE

TF --SQL_TABLE_VALUED_FUNCTION

UQ --UNIQUE_CONSTRAINT

브이 - 검토

관련 문제