Program Club

SQL Server 데이터베이스의 모든 스키마 목록을 가져 오는 방법

proclub 2020. 12. 12. 11:39
반응형

SQL Server 데이터베이스의 모든 스키마 목록을 가져 오는 방법


주어진 SQL Server 데이터베이스의 모든 스키마 목록을 검색하고 싶습니다. ADO.NET스키마 검색 API를 사용하여 모든 컬렉션 목록을 얻지 만 '스키마'에 대한 컬렉션이 없습니다. 'Tables', 'Procedures'컬렉션 (및 필요한 경우 다른 항목)을 탐색하고 고유 한 스키마 이름 목록을 얻을 수 있지만 동일한 결과를 얻는 더 쉽고 짧은 방법이 없습니까?

예 : 표준 'AdventureWorks'나도 다음 목록을 확보하려는 데이터베이스 - dbo,HumanResources,Person,Production,Purchasing,Sales(내가 좋아하는 다른 표준 schem 이름 생략 한 db_accessadmin, db_datareader등)

편집 : 시스템 뷰를 쿼리하여 스키마 목록을 가져올 수 INFORMATION_SCHEMA.SCHEMATA있지만 첫 번째 선택으로 스키마 API를 사용하는 것을 선호합니다.


2005 년 이후에는 둘 다 당신이 찾고있는 것을 제공 할 것입니다.

SELECT name FROM sys.schemas
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

2000 경우 인스턴스데이터베이스 목록이 제공됩니다 .

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

이것이 @Adrift의 답변에 언급 된 "역방향 비 호환성"입니다.

SQL Server 2000 (및 그 이하)에서는 역할을 비슷한 방식으로 네임 스페이스로 사용할 수 있지만 실제로 "스키마"가 없습니다. 이 경우 가장 가까운 값일 수 있습니다.

SELECT * FROM sysusers WHERE gid <> 0

여기에서이 쿼리를 시도하십시오.

SELECT * FROM sys.schemas

이렇게하면이 작업을 실행하는 데이터베이스의 모든 정의 스키마에 대한 이름과 schema_id가 제공됩니다.

"스키마 API"를 쿼리하는 것이 무엇을 의미하는지 잘 모르겠습니다. 이러한 sys.카탈로그 뷰 ( sys스키마에 있음)는 해당 데이터베이스의 데이터베이스 및 개체에 대한 시스템 정보에 대한 최상의 선택입니다.


SELECT s.name + '.' + ao.name
       , s.name
FROM sys.all_objects ao
INNER JOIN sys.schemas s ON s.schema_id = ao.schema_id
WHERE ao.type='u';

INFORMATION_SCHEMA.SCHEMATA 뷰를 쿼리 할 수도 있습니다.

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

INFORMATION_SCHEMA 뷰를 쿼리하는 것이 기본 sys 테이블의 변경으로부터 보호하므로 권장됩니다. SQL Server 2008 R2 도움말에서 :

정보 스키마보기는 SQL Server 메타 데이터에 대한 내부 시스템 테이블 독립적보기를 제공합니다. 정보 스키마보기를 사용하면 기본 시스템 테이블이 크게 변경 되었더라도 응용 프로그램이 올바르게 작동 할 수 있습니다. SQL Server에 포함 된 정보 스키마 뷰는 INFORMATION_SCHEMA에 대한 ISO 표준 정의를 따릅니다.

아이러니하게도 바로 앞에 다음 메모가 나옵니다.

이전 버전과의 호환성을 방해하는 정보 스키마보기가 일부 변경되었습니다. 이러한 변경 사항은 특정보기에 대한 항목에 설명되어 있습니다.


다음 쿼리를 사용하여 특정 데이터베이스 사용자에 대한 스키마를 가져올 수도 있습니다.

select s.schema_id, s.name as schema_name
from sys.schemas s
inner join sys.sysusers u on u.uid = s.principal_id
where u.name='DataBaseUserUserName'
order by s.name

Sql Server Management Studio를 사용하는 경우 다음을 검색하여 모든 스키마 목록을 가져 오거나 고유 한 스키마를 만들거나 기존 스키마를 제거 할 수 있습니다.

데이터베이스-[사용자 데이터베이스]-보안-스키마

참고 URL : https://stackoverflow.com/questions/3719623/how-do-i-obtain-a-list-of-all-schemas-in-a-sql-server-database

반응형