共用方式為


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 2012 伺服器執行個體時,系統就會從先前的位置附加這些目錄檔案以及其他資料庫檔案,此行為與 SQL Server 2005 的行為相同。 如需詳細資訊,請參閱<從 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 以移除複寫。

只有 SQL Server 2005 和更新版本的資料庫可以附加到 SQL Server 2012。 如果資料庫的相容性層級小於 90,當資料庫附加至 SQL Server 2012 時,其相容性層級就會變更為層級 90。

當資料庫第一次連接或還原到新的 SQL Server 執行個體時,資料庫主要金鑰複本 (以服務主要金鑰所加密) 尚未儲存在伺服器中。 您必須利用 OPEN MASTER KEY 陳述式來解密資料庫主要金鑰 (DMK)。 DMK 解密之後,您便可以選擇利用 ALTER MASTER KEY REGENERATE 陳述式來提供服務主要金鑰 (SMK) 所加密的 DMK 複本給伺服器,以在未來啟用自動解密。 當資料庫從舊版升級時,應該會重新產生 DMK 以使用較新的 AES 演算法。 如需有關重新產生 DMK 的詳細資訊,請參閱<ALTER MASTER KEY (Transact-SQL)>。 重新產生 DMK 金鑰以升級至 AES 所需的時間是取決於 DMK 所保護的物件數目而定。 重新產生 DMK 金鑰以升級至 AES 只需執行一次,且不會影響金鑰循環策略中後續的重新產生。

權限

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

範例

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

EXEC sp_attach_db @dbname = N'AdventureWorks2012', 
    @filename1 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf', 
    @filename2 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';

請參閱

參考

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_removedbreplication (Transact-SQL)

系統預存程序 (Transact-SQL)

概念

資料庫卸離與附加 (SQL Server)