2010-09-27 19 views
26

Ho uno schema definito nel mio database. Solo che adesso ogni volta che faccio una dichiarazione di sql devo fornire lo schema ... SELECT * FROM [myschema].tableSchema server SQL e schema predefinito

ho impostato lo schema predefinito per il mio utente utilizzando Management Studio e anche corse il ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] e ho ancora ottenere l'oggetto non valido 'tavolo 'quando si scrive una query senza lo schema (SELECT * FROM table)

C'è un modo per scrivere SELECT * FROM table senza dover specificare il nome dello schema tutto il tempo?

È in SQL 2005 utilizzando SQL Management Studio.

+0

Si sta eseguendo la query SQL da un codice (Java, .Net) o SQL Manager? –

+0

Da sql management studio ... – pdiddy

risposta

43

È l'utente un SA, se così non funziona, secondo le documentationSA utenti sono sempre in default alla dbo schema.

Il valore di DEFAULT_SCHEMA viene ignorato se l'utente è un membro del ruolo server fisso sysadmin . Tutti i membri membri del server fisso sysadmin hanno uno schema predefinito di dbo.

+0

Nei ruoli Server, im in public e il ruolo del server sysadmin non è selezionato ... – pdiddy

+2

Esegui questi 'SELECT SUSER_NAME()' e 'SELECT USER_NAME()' e dimmi il tuo output. –

+0

il primo è il mio utente e il secondo è dbo .... – pdiddy

4

paio di opzioni:

  1. È il vostro utente elencato in Protezione> Utenti (in SSMS)? Controllare le proprietà (fare clic con il pulsante destro del mouse sul nome) e verificare se lo schema predefinito è impostato nel contesto del database anziché nell'istanza (che è ciò che ALTER USER sta impostando).
  2. Create a synonym per la tabella che si desidera fare riferimento:

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

    ... che interesserà tutti coloro che non fa uso di almeno due nome di notazione, nel contesto di tale database. Read more about it here. Ma è associato in definitiva a uno schema.

  3. Verificare che il database selezionato nel menu a discesa "Database disponibili" (in alto a sinistra, a sinistra del pulsante Esegui) sia corretto.

  4. utilizzare tre nome notazione quando si specifica tabella (e vista) i riferimenti:

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

La mia domanda riguardava se fosse possibile evitare la notazione del nome attraverso alcune configurazioni in SSMS .... Vorrei non includere l'intero db, schema nella mia query in quanto può essere lungo . I database disponibili sono selezionati correttamente. – pdiddy

+0

@pdiddy: ho aggiunto che un sinonimo è un'altra considerazione. Scusa, ho perso il fatto che non volevi usare la notazione del nome. –

+0

per l'opzione 1, come posso verificare il contesto ..? – pdiddy

3

Se non si desidera utilizzare "pieno qualificati" nomi SQL, allora avete bisogno per evitare di creare le tabelle utilizzando qualsiasi account o ruolo che non utilizza lo schema predefinito "dbo" assegnato. Perché è necessario modificare lo schema predefinito sull'utente se non si intende utilizzarlo?

+0

Perché dovrebbe utilizzare nomi SQL "completi"? Ad esempio, desidera memorizzare alcuni dati utente nel database. E ci possono essere molti utenti che usano lo stesso programma. Da schema, può avere la propria tabella creata. Nei nostri programmi questo va avanti allo stesso modo. L'unico importante è lo schema predefinito funzionante! – Jettero

Problemi correlati