Découvrez le schéma SQL Server par défaut pour la session

J'ai besoin de savoir quel est le schéma par défaut actuel dans un script SQL qui fait un certain DDL. Je n'ai pas besoin de définir le schéma, mais j'ai besoin d'obtenir une référence (nom ou ID) dans une variable. Le script peut être exécuté en tant que connexion windows, donc ce qui suit n'est pas suffisant:

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

J'ai pensé à le faire en créant un objet nommé aléatoirement dans le schéma actuel, puis en regardant ses détails dans information_schema, mais quelqu'un a-t-il un plus net de la sorte?

Je travaille dans SQL Server 2005.

21
demandé sur marc_s 2011-04-01 16:00:34

3 réponses

Comment à ce sujet.

SELECT SCHEMA_NAME()

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

SCHEMA_NAME renverra le nom du schéma par défaut de l'appelant

Sinon SCHEMA_ID()

38
répondu Chris Diver 2011-04-01 14:13:43

Que diriez-vous d'utiliser DATABASE_PRINCIPAL_ID pour obtenir le principal de base de données de l'utilisateur actuel?

SELECT name, default_schema_name 
FROM sys.database_principals 
WHERE type = 'S' and name = USER_NAME(DATABASE_PRINCIPAL_ID())
3
répondu Ed Harper 2011-04-01 13:17:50

Voici ce que vous pouvez faire pour voir plus d'informations sur votre schéma actuel:

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'

J'espère que cela aide.

1
répondu Anand Thangappan 2014-02-21 16:58:10