web-dev-qa-db-fra.com

Schéma du serveur SQL et schéma par défaut

J'ai un schéma à définir dans ma base de données. Sauf que maintenant, chaque fois que je fais une instruction SQL, je dois fournir le schéma ... SELECT * FROM [myschema].table

J'ai défini le schéma par défaut pour mon utilisateur à l'aide de Management Studio et j'ai également exécuté le ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] et j'obtiens toujours l'objet 'table' non valide lors de l'écriture d'une requête sans le schéma (SELECT * FROM table)

Existe-t-il un moyen d'écrire SELECT * FROM table sans avoir à spécifier tout le temps le nom du schéma?

C'est sur SQL 2005 en utilisant SQL Management Studio.

31
pdiddy

L'utilisateur est-il un SA, si tel n'est pas le cas, selon documentationSA les utilisateurs sont toujours par défaut sur le schéma dbo.

La valeur de DEFAULT_SCHEMA est ignorée si l'utilisateur est membre du rôle serveur fixe sysadmin. Tous les membres du rôle serveur fixe sysadmin ont un schéma par défaut dbo.

48
Dustin Laine

Quelques options:

  1. Votre utilisateur est-il répertorié sous Sécurité> Utilisateurs (dans SSMS)? Vérifiez les propriétés (cliquez avec le bouton droit sur le nom) et voyez si le schéma par défaut est défini dans le contexte de la base de données, plutôt que dans l'instance (qui est ce que ALTER USER définit).
  2. Créez un synonyme pour le tableau que vous souhaitez référencer:

    CREATE SYNONYM table_name  
       FOR [your_db].[your_schema].table_name
    

    ... qui affectera tous ceux qui n'utilisent pas au moins deux notations de nom, dans le contexte de cette base de données. En savoir plus ici . Mais il est finalement associé à un schéma.

  3. Vérifiez que la base de données sélectionnée dans la liste déroulante "Bases de données disponibles" (en haut à gauche, à gauche du bouton Exécuter) est correcte.

  4. Utilisez la notation à trois noms lorsque vous spécifiez des références de table (et de vue):

    SELECT * 
      FROM [your_db].[your_schema].table_name
    
4
OMG Ponies

Si vous ne souhaitez pas utiliser de noms SQl "complets", vous devez éviter de créer vos tables à l'aide de tout compte ou rôle qui n'utilise pas le schéma par défaut "dbo" attribué. Pourquoi devez-vous modifier le schéma par défaut de l'utilisateur si vous ne prévoyez pas de l'utiliser?

2
Mitch Stokely