2010-09-27 4 views
26

J'ai un schéma défini dans ma base de données. Sauf que maintenant chaque fois que je fais une instruction SQL que je dois fournir le schéma ... SELECT * FROM [myschema].tableSchéma du serveur SQL et schéma par défaut

I définir le schéma par défaut pour mon utilisateur à l'aide studio de gestion et a également couru le ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] et je reçois toujours l'objet non valide « table 'lors de l'écriture d'une requête sans le schéma (table SELECT * FROM)

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

SQL Server 2005 utilise SQL Management Studio.

+0

Ecrivez-vous la requête SQL à partir d'un code (Java, .Net) ou SQL Manager? –

+0

De sql management studio ... – pdiddy

Répondre

43

Est-ce que l'utilisateur un SA, si elle ne fonctionne pas, selon les documentationSA utilisateurs sont toujours défaillants au schéma dbo.

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

+0

Dans les rôles de serveur, im en public et le rôle de serveur sysadmin n'est pas vérifié ... – pdiddy

+2

Exécutez ces 'SELECT SUSER_NAME()' et 'SELECT USER_NAME()' et dites-moi votre sortie. –

+0

le premier est mon utilisateur et le second est dbo .... – pdiddy

4

Couple d'options:

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

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

    ... ce qui affectera tous ceux qui ne pas utiliser au moins deux notations de nom, dans le contexte de cette base de données. Read more about it here. Mais il est associé en fin de compte à 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 trois notations nom lors de la spécification des références tableau (et vue):

    SELECT * 
        FROM [your_db].[your_schema].table_name 
    
+0

Ma question était de savoir s'il était possible d'éviter la notation de nom via une certaine configuration dans SSMS .... Je ne voudrais pas inclure le db, schéma dans ma requête car il peut être long . Les bases de données disponibles sont sélectionnées correctement. – pdiddy

+0

@pdiddy: J'ai ajouté qu'un synonyme est une autre considération. Désolé, j'ai manqué que vous ne vouliez pas utiliser la notation de nom. –

+0

pour l'option 1, comment vérifier le contexte ..? – pdiddy

3

Si vous ne souhaitez pas utiliser « qualifié complet » noms sql, vous devez éviter de créer vos tables utiliser un compte ou un rôle qui n'utilise pas le schéma par défaut "dbo" attribué. Pourquoi avez-vous besoin de modifier le schéma par défaut de l'utilisateur si vous ne prévoyez pas de l'utiliser?

+0

Pourquoi utiliser des noms SQL "complets"? Par exemple, il veut stocker certaines données utilisateur dans la base de données. Et il peut y avoir beaucoup d'utilisateurs utilisant le même programme. Par schéma, il peut avoir sa propre table créée. Dans nos programmes, cela se passe de la même manière. Le seul important est le schéma par défaut de travail! – Jettero

Questions connexes