Share via


sp_attach_db (Transact-SQL)

將資料庫附加至伺服器。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 建議您改用 CREATE DATABASE database_name FOR ATTACH。如需詳細資訊,請參閱<CREATE DATABASE (Transact-SQL)>。

[!附註]

當一或多個記錄檔有新位置時,若要重建多個記錄檔,請使用 CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG。

安全性注意事項安全性注意事項

建議您不要附加或還原來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • [ @dbname= ] **'**dbnam '
    這是要附加至伺服器的資料庫名稱。這個名稱必須是唯一的。dbname 是 sysname,預設值是 NULL。

  • [ @filename1= ] 'filename_n'
    這是資料庫檔案的實體名稱,其中包括路徑。filename_n 是 nvarchar(260),預設值是 NULL。您最多可以指定 16 個檔案名稱。參數名稱開始於 @filename1,可以遞增到 @filename16。檔案名稱清單至少必須包括主要檔案。主要檔案包含指向資料庫中其他檔案的系統資料表。這份清單也必須包括資料庫卸離之後所移動的任何檔案。

    [!附註]

    這個引數對應到 CREATE DATABASE 陳述式的 FILENAME 參數。如需詳細資訊,請參閱<CREATE DATABASE (Transact-SQL)>。

    當您將包含全文檢索目錄檔案的 SQL Server 2005 資料庫附加至 SQL Server 2008 R2 伺服器執行個體時,系統就會從先前的位置附加這些目錄檔案以及其他資料庫檔案,此行為與 SQL Server 2005 的行為相同。如需詳細資訊,請參閱<全文檢索搜尋升級>。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

只應對先前利用明確的 sp_detach_db 作業從資料庫伺服器中卸離的資料庫,或對已複製的資料庫執行 sp_attach_db 預存程序。如果您必須指定 16 個以上的檔案,請使用 CREATE DATABASE database_name FOR ATTACH 或 CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG。如需詳細資訊,請參閱<CREATE DATABASE (Transact-SQL)>。

任何未指定的檔案都假設為在前次的已知位置中。若要在不同位置使用檔案,您必須指定新位置。

由較新版本 SQL Server 所建立的資料庫無法附加在舊版本中。

[!附註]

無法卸離或附加資料庫快照集。

當您附加的複寫資料庫是複製而非卸離時,請考慮下列各項:

  • 如果您要將資料庫附加至與原始資料庫相同的伺服器執行個體和版本,則不需要其他步驟。

  • 如果您將資料庫附加至相同伺服器執行個體,但卻是升級的版本,則必須在附加作業完成後,執行 sp_vupgrade_replication 來升級複寫。

  • 如果您將資料庫附加至不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後,執行 sp_removedbreplication 以移除複寫。

來源資料庫的版本至少必須為 80 (SQL Server 2000),才能附加至 SQL Server 2008 R2 或 SQL Server 2008。相容性層級小於 80 的 SQL Server 2000 或 SQL Server 2005 資料庫會在附加時設為相容性 80。

權限

如需有關附加資料庫時如何處理權限的詳細資訊,請參閱<CREATE DATABASE (Transact-SQL)>。

範例

下列範例會將 AdventureWorks2008R2 的檔案附加至目前的伺服器。

EXEC sp_attach_db @dbname = N'AdventureWorks2008R2', 
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf', 
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf';