sp_attach_db (Transact-SQL)

Collega un database a un server.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È invece consigliabile utilizzare CREATE DATABASE database_name FOR ATTACH. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

[!NOTA]

Per generare nuovamente più file di log quando uno o più di essi si trovano in una nuova posizione, utilizzare CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Nota sulla protezioneNota sulla protezione

È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database. Prima di utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare inoltre il codice nel database, ad esempio stored procedure o altro codice definito dall'utente.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_attach_db [ @dbname= ] 'dbname'
        , [ @filename1= ] 'filename_n' [ ,...16 ] 

Argomenti

  • [ @dbname= ] **'**dbnam '
    Nome del database da collegare al server. Deve essere un nome univoco. dbname è di tipo sysname e il valore predefinito è NULL.

  • [ @filename1= ] 'filename_n'
    Nome fisico, completo di percorso, di un file di database. filename_n è di tipo nvarchar(260) e il valore predefinito è NULL. È possibile specificare un massimo di 16 nomi di file. I nomi dei parametri sono numerati a partire da @filename1 e vengono incrementati fino a @filename16. L'elenco dei nomi di file deve includere almeno il file primario, il quale contiene le tabelle di sistema che fanno riferimento ad altri file del database. Tale elenco deve includere inoltre tutti i file spostati dopo lo scollegamento del database.

    [!NOTA]

    Questo argomento esegue il mapping al parametro FILENAME dell'istruzione CREATE DATABASE. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

    Quando si collega un database di SQL Server 2005 contenente file di cataloghi full-text a un'istanza del server SQL Server 2008, i file di catalogo vengono collegati dal percorso precedente insieme agli altri file del database, come in SQL Server 2005. Per ulteriori informazioni, vedere Aggiornamento della ricerca full-text.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Nessuno

Osservazioni

La stored procedure sp_attach_db deve essere eseguita solo in database che sono stati precedentemente scollegati dal server di database tramite un'operazione sp_detach_db esplicita o in database copiati. Se è necessario specificare più di 16 file, utilizzare CREATE DATABASE database_name FOR ATTACH oppure CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

Si presuppone che i file non specificati siano memorizzati nell'ultima posizione conosciuta. Per utilizzare un file in una posizione diversa, è necessario specificare la nuova posizione.

Un database creato con una versione più recente di SQL Server non può essere collegato in versioni precedenti.

[!NOTA]

Non è possibile scollegare o collegare uno snapshot del database.

Quando si collega un database replicato copiato anziché scollegato, è necessario considerare quanto segue:

  • Se si collega il database alla stessa istanza del server e alla stessa versione del database originale, non sono necessari passaggi aggiuntivi.

  • Se si collega il database alla stessa istanza del server ma si utilizza una versione aggiornata, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_vupgrade_replication per aggiornare la replica.

  • Se si collega il database a un'istanza del server diversa, indipendentemente dalla versione, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_removedbreplication per rimuovere la replica.

La versione del database di origine deve essere almeno la 80 (SQL Server 2000) per collegarsi al database SQL Server 2008. I database SQL Server 2000 o SQL Server 2005 che hanno un livello di compatibilità inferiore a 80 sono impostati sulla compatibilità 80 quando vengono collegati.

Autorizzazioni

Per informazioni sulla modalità di gestione delle autorizzazioni quando viene collegato un database, vedere CREATE DATABASE (Transact-SQL).

Esempi

Nell'esempio seguente vengono collegati file da AdventureWorks al server corrente.

EXEC sp_attach_db @dbname = N'AdventureWorks', 
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf', 
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf';