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.
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()
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())
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.