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
'sourcecode' 카테고리의 다른 글
Spring-boot에서 정적 웹 콘텐츠를 추가하는 방법 (0) | 2023.06.28 |
---|---|
날짜를 올바르게 저장하는 방법은? (0) | 2023.06.28 |
스프링 부트 연속 빌드로 실행 (0) | 2023.06.28 |
테이블 정의를 표시하기 위한 T-SQL 쿼리? (0) | 2023.06.28 |
UI 레이블 layer.cornerRadius가 iOS 7.1에서 작동하지 않음 (0) | 2023.06.28 |