Selezione di un database
La maggior parte degli oggetti di un'istanza di SQL Server viene archiviata nei database. Tutti i riferimenti agli oggetti di database devono essere risolti in modo esplicito o implicito nel database specifico in cui sono contenuti.
Riferimenti al database
Nel caso di riferimenti espliciti a un database, in un'istruzione Transact-SQL viene specificato il nome del database contenente i dati. Nell'esempio seguente viene specificato in modo esplicito il nome del database AdventureWorks2008R2:
SELECT BusinessEntityID, LoginID, NationalIDNumber
FROM AdventureWorks2008R2.HumanResources.Employee;
Nel caso di riferimenti impliciti a un database, in un'istruzione Transact-SQL il nome del database non viene specificato, ad esempio:
SELECT BusinessEntityID, LoginID, NationalIDNumber
FROM HumanResources.Employee;
I riferimenti impliciti vengono risolti in SQL Server in base al concetto di database corrente. Per ogni connessione a un'istanza di SQL Server è sempre presente un database impostato come database corrente. Di conseguenza, tutti i riferimenti a oggetti in cui non è specificato un nome di database vengono considerati riferimenti al database corrente. Se, ad esempio, AdventureWorks2008R2 è impostato come database corrente per una connessione, tutte le istruzioni che fanno riferimento a un oggetto denominato Product vengono risolte nella tabella Product in AdventureWorks2008R2.
Database predefinito
Per ogni account di accesso di SQL Server è presente un database predefinito, che può essere specificato da un membro del ruolo predefinito del server sysadmin al momento della definizione dell'account. Se non viene specificato alcun database predefinito, il database master viene impostato come database predefinito per l'account di accesso. Successivamente è possibile modificare il database predefinito per l'account di accesso utilizzando la stored procedure sp_defaultdb.
Alla prima connessione a un'istanza di SQL Server, il database predefinito per l'account di accesso viene in genere impostato come database corrente. In fase di connessione è tuttavia possibile specificare come database corrente un database diverso. Questa richiesta è prioritaria rispetto al database predefinito associato all'account di accesso. In una richiesta di connessione è possibile specificare un database nei modi seguenti:
Nell'utilità sqlcmd specificare il nome del database utilizzando l'opzione /d.
In ADO specificare il nome del database nella proprietà Initial Catalog di un oggetto ADO Connection.
Nel provider OLE DB Native Client SQL Server specificare il nome del database nella proprietà DBPROP_INIT_CATALOG.
Nel driver ODBC Native Client SQL Server, è possibile impostare il nome di un database in un'origine dei dati ODBC utilizzando la casella Database della procedura guidata per la configurazione DSN di Microsoft SQL Server o l'istruzione DATABASE = parameter in una chiamata a SQLConfigDataSource. È inoltre possibile specificare DATABASE = in una chiamata a SQLDriverConnect o SQLBrowseConnect.
Selezione di un database
Durante la connessione a un'istanza di SQL Server è possibile modificare l'impostazione del database corrente. Questa operazione viene definita utilizzo, o selezione, di un database. È possibile modificare il database corrente nei modi seguenti:
Eseguire l'istruzione Transact-SQL USE database_name indipendentemente dall'API di database in uso in un'applicazione.
In SQL Server Management Studio fare clic su Nuova query. Sulla barra degli strumenti delle query selezionare un database nell'elenco dei database disponibili.
Nel driver ODBC Native Client SQL Server chiamare SQLSetConnectAttr per impostare l'attributo di connessione SQL_ATTR_CURRENT_CATALOG.
Nota
In molti esempi di riferimento di Transact-SQL disponibili nella documentazione online di SQL Server la prima riga di codice è USE AdventureWorks2008R2. Ciò garantisce l'esecuzione dell'esempio sul database specificato in modo esplicito anziché nel contesto del database corrente.