sourcecode

SQL Server 데이터베이스의 모든 스키마 목록을 가져오려면 어떻게 합니까?

copyscript 2023. 6. 28. 21:55
반응형

SQL Server 데이터베이스의 모든 스키마 목록을 가져오려면 어떻게 합니까?

지정된 SQL Server 데이터베이스의 모든 스키마 목록을 검색하려고 합니다.사용ADO.NET스키마 검색 API, 모든 컬렉션의 목록을 가져오지만 '스키마' 컬렉션이 없습니다.나는 횡단할 수 있습니다.'Tables','Procedures'컬렉션(및 필요한 경우 기타)과 고유한 스키마 이름 목록을 얻지만 동일한 결과를 얻을 수 있는 더 쉽고 간편한 방법은 없을까요?

예:기준으로'AdventureWorks'데이터베이스 나는 다음 목록을 얻고 싶습니다.dbo,HumanResources,Person,Production,Purchasing,Sales(다음과 같은 다른 표준 스키마 이름은 생략했습니다.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가 제공됩니다.

"schema API"를 쿼리하는 것이 무슨 뜻인지 잘 모르겠습니다 - 이것들.sys.카탈로그 보기(의)sys스키마)는 해당 데이터베이스의 데이터베이스 및 오브젝트에 대한 시스템 정보에 대한 최선의 방법입니다.

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

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

INFORMATION_SCHEMA 뷰는 기본 시스템 테이블의 변경으로부터 보호하기 때문에 쿼리하는 것이 좋습니다.SQL Server 2008 R2 도움말:

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

아이러니하게도, 이 노트 바로 앞에는 다음과 같은 노트가 있습니다.

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

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';

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

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

[

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

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

다음 쿼리를 실행할 수 있습니다.

SELECT s.name AS schema_name,
u.name AS schema_owner
FROM sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY s.name;

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

반응형