Узнайте схему SQL Server по умолчанию для сеанса - PullRequest
24 голосов
/ 01 апреля 2011

У меня есть требование знать, какая схема используется по умолчанию в сценарии SQL, который выполняет некоторые DDL. Мне не нужно устанавливать схему, но мне нужно получить ссылку на нее (имя или идентификатор) в переменную. Сценарий может быть запущен в качестве входа в Windows, поэтому следующего недостаточно:

SELECT name, default_schema_name 
FROM sys.database_principals 
WHERE type = 'S' and name = SYSTEM_USER --SYSTEM User won't be named as a principal

Я думал о том, чтобы сделать это путем создания объекта со случайным именем в текущей схеме, а затем посмотреть на его детали в information_schema, но есть ли у кого более понятный способ?

Я работаю в SQL Server 2005.

Ответы [ 3 ]

41 голосов
/ 01 апреля 2011

Как насчет этого.

SELECT SCHEMA_NAME()

http://msdn.microsoft.com/en-us/library/ms175068.aspx

SCHEMA_NAME вернет имя схемы по умолчанию для вызывающего абонента

В качестве альтернативы SCHEMA_ID()

5 голосов
/ 01 апреля 2011

Как насчет использования DATABASE_PRINCIPAL_ID для получения принципала БД текущего пользователя?

SELECT name, default_schema_name 
FROM sys.database_principals 
WHERE type = 'S' and name = USER_NAME(DATABASE_PRINCIPAL_ID())
2 голосов
/ 01 апреля 2011

Вот что вы можете сделать, чтобы увидеть больше информации о вашей текущей схеме:

select sc.name as schemaname, sp.[name] as owner,
sp.default_database_name as [database]  from sys.schemas  sc
inner join sys.server_principals sp on sc.principal_id =  sp.principal_id

select sc.name as schemaname, sp.[name] as owner,
sp.default_database_name as [database],sp.*  from sys.schemas  sc
inner join sys.server_principals sp on sc.principal_id =  sp.principal_id

SELECT name, default_schema_name  
FROM sys.database_principals WHERE type = 'S'

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...