sp_attach_db (Transact-SQL)

適用於:SQL Server

將資料庫附加至伺服器。

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 我們建議您改用 CREATE DATABASE <database_name> FOR ATTACH 。 如需詳細資訊,請參閱 CREATE DATABASE。 若要在一或多個具有新位置時重建多個記錄檔,請使用 CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG

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

語法

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

引數

[ @dbname = ] N'dbname'

要附加至伺服器的資料庫名稱。 @dbname為 sysname,沒有預設值。

[ { @filename1 ... @filename16 } = ] { N'filename1' ...N'filename16' }

資料庫檔案的實體名稱,包括路徑。 此參數為 nvarchar(260),預設值為 NULL。 您最多可以指定 16 個檔案名。 參數名稱會從@filename1開始,並遞增至@filename16。 檔名清單至少必須包含主要檔案 (.mdf)。 主要檔案包含指向資料庫中其他檔案的系統數據表。 清單也必須包含卸離資料庫之後移動的任何檔案。

此參數會對應至 FILENAME 語句的 CREATE DATABASE 參數。 如需詳細資訊,請參閱 CREATE DATABASE

注意

當您將包含全文檢索目錄檔案的 SQL Server 2005 (9.x) 資料庫附加至較新版本的 SQL Server 時,目錄檔案會從先前的位置附加與其他資料庫檔案,與 SQL Server 2005 (9.x) 相同。 如需詳細資訊,請參閱 升級全文檢索搜尋

傳回碼值

0 (成功) 或 1 (失敗)。

結果集

無。

備註

sp_attach_db 存程式應該只在先前使用明確 sp_detach_db 作業或複製的資料庫卸離資料庫伺服器的資料庫上執行。 如果您必須指定超過 16 個檔案,請使用 CREATE DATABASE <database_name> FOR ATTACHCREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG。 如需詳細資訊,請參閱 CREATE DATABASE

任何未指定的檔案都假設位於其最後一個已知位置。 若要在不同的位置使用檔案,您必須指定新的位置。

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

注意

資料庫快照集無法中斷連結或附加。

當您附加已複製而非中斷連結的復寫資料庫時,請考慮下列條件:

  • 如果您將資料庫附加至與原始資料庫相同的伺服器實例和版本,則不需要執行任何進一步的步驟。

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

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

當資料庫第一次附加或還原至 SQL Server 的新實例時,服務主要密鑰 (SMK) 加密的資料庫主要金鑰複本尚未儲存在伺服器中。 您必須使用 OPEN MASTER KEY 語句來解密 DMK。 一旦解密 DMK 之後,您就可以選擇在未來使用 ALTER MASTER KEY REGENERATE 語句來提供伺服器一份 DMK,並使用 SMK 加密的 DMK 復本來啟用自動解密。 從舊版升級資料庫時,應該重新產生 DMK 以使用較新的 AES 演算法。 如需重新產生 DMK 的詳細資訊,請參閱 ALTER MASTER KEY (Transact-SQL)。 重新產生 DMK 金鑰以升級至 AES 所需的時間是取決於 DMK 所保護的物件數目而定。 重新產生 DMK 金鑰以升級至 AES 只需要一次,而且不會影響未來重新產生作為金鑰輪替策略的一部分。

權限

如需附加資料庫時許可權處理方式的相關信息,請參閱 CREATE DATABASE

範例

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

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';