나는 데이터베이스 이름을 인수로 취하는 절차를 가지고 있으며이 데이터베이스 이름을 사용하여 테이블, 뷰, 트리거를 포함하여 모든 개체가 해당 정보를 찾는 데 도움이되는 참조를 얻도록해야합니다.특정 데이터베이스의 개체를 가져 오는 방법은 무엇입니까?
참고 : 사용하려고 시도했습니다 SELECT * FROM sys.obj
하지만 모든 데이터베이스에서 전체 개체를 제공합니다. 특정 데이터베이스로 제한 할 수있는 방법
나는 데이터베이스 이름을 인수로 취하는 절차를 가지고 있으며이 데이터베이스 이름을 사용하여 테이블, 뷰, 트리거를 포함하여 모든 개체가 해당 정보를 찾는 데 도움이되는 참조를 얻도록해야합니다.특정 데이터베이스의 개체를 가져 오는 방법은 무엇입니까?
참고 : 사용하려고 시도했습니다 SELECT * FROM sys.obj
하지만 모든 데이터베이스에서 전체 개체를 제공합니다. 특정 데이터베이스로 제한 할 수있는 방법
에서 언급 한 것과 같은 문을 실행했습니다. 그런 다음 내가 연결된 대상 만 얻고 있습니다. 따라서 특정 데이터베이스에 연결하려면 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
브이 - 검토
동적 SQL을 사용해야합니다. 그리고 동적 SQL의 일부로 데이터베이스 이름을 포함시켜야합니다. "Select * from + @DBName +".sys.objects ... " –
이 답변을 수정하면 다음과 같이 처리됩니다 : http://stackoverflow.com/a/18462734/2095534 –