Как получить список всех схем в базе данных Sql Server


Я хочу получить список всех схем в данной базе данных Sql Server. Используя ADO.NET schema retrieval API я получаю список всех коллекций, но нет коллекции для "схем". Я мог бы пересечь 'Tables','Procedures' коллекции (и другие, если требуется) и получить список уникальных имен схем, но нет ли более простого/короткого способа достижения того же результата?

пример: для стандартной 'AdventureWorks' база данных я бы тоже хотел получить следующий список -dbo,HumanResources,Person,Production,Purchasing,Sales (Я опустил другие стандартные имена schem, такие как db_accessadmin,db_datareader etc)

Edit: я могу получить список схем, запросив системный вид -INFORMATION_SCHEMA.SCHEMATA но предпочел бы использовать API схемы в качестве первого выбора.

5   51   2010-09-15 20:14:47

5 ответов:

для 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" - these sys. вид каталога (в sys схема) - это ваш лучший выбор для любой системной информации о базах данных и объектах в этих базах данных.

вы также можете запросить INFORMATION_SCHEMA.Вид схемы:

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

Я считаю, что запрос представлений INFORMATION_SCHEMA рекомендуется, поскольку они защищают вас от изменений в базовых таблицах sys. Из справки SQL Server 2008 R2:

представления информационных схем предоставляют внутренняя, системная таблица-независимая просмотр метаданных SQL Server. Представления информационных схем позволяют приложения для правильной работы несмотря на значительные изменения было сделано для базовых системных таблиц. Включенные представления информационной схемы в SQL Server соблюдайте 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, вы можете получить список всех схем, создать свою собственную схему или удалить существующую, перейдя по ссылке:

Базы Данных - [Ваша База Данных] - Безопасность-Схемы