次の方法で共有


sp_attach_single_file_db (Transact-SQL)

適用対象: SQL サーバー

データ ファイルが 1 つだけのデータベースを現在のサーバーにアタッチします。 sp_attach_single_file_db は、複数のデータ ファイルでは使用できません。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに CREATE DATABASE <database_name> FOR ATTACH を使用することをお勧めします。 詳細については、[CREATE DATABASE](/sql/t-sql/statements/create-database-sql-server-transact-sql) に関する記事をご覧ください。 レプリケートされたデータベースでは、この手順を使用しないでください。

不明なソースまたは信頼されていないソースからデータベースをアタッチまたは復元しないでください。 こうしたデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。 不明または信頼できないソースのデータベースを使用する前に、運用サーバー以外のサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

Transact-SQL 構文表記規則

構文

sp_attach_single_file_db
    [ @dbname = ] N'dbname'
    , [ @physname = ] N'physname'
[ ; ]

引数

[ @dbname = ] N'dbname'

サーバーに接続するデータベースの名前。 @dbnamesysname で、既定値はありません。

[ @physname = ] N'physname'

データベース ファイルの物理名 (パスを含む)。 @physnamenvarchar(260)で、既定値はありません。

この引数は、CREATE DATABASE ステートメントの FILENAME パラメーターにマップされます。 詳細については、[CREATE DATABASE](/sql/t-sql/statements/create-database-sql-server-transact-sql) に関する記事をご覧ください。

Note

フルテキスト カタログ ファイルを含む SQL Server 2005 (9.x) データベースを SQL Server の新しいサーバー インスタンスにアタッチすると、SQL Server 2005 (9.x) と同じように、カタログ ファイルは以前の場所から他のデータベース ファイルと共にアタッチされます。 詳細については、「フルテキスト検索のアップグレード」を参照してください。

リターン コードの値

0 (成功) または 1 (失敗)。

結果セット

ありません。

解説

sp_attach_single_file_dbは、明示的なsp_detach_db操作を使用してサーバーからデタッチされたデータベース、またはコピーしたデータベースでのみ使用します。

sp_attach_single_file_db は、1 つのログ ファイルを持つデータベースでのみ機能します。 sp_attach_single_file_dbサーバーにデータベースをアタッチすると、新しいログ ファイルがビルドされます。 データベースが読み取り専用の場合、ログ ファイルは、アタッチされる前の場所に作成されます。

Note

データベース スナップショットのデタッチおよびアタッチは行うことができません。

レプリケートされたデータベースでは、この手順を使用しないでください。

アクセス許可

データベースがアタッチされるときにアクセス許可がどのように処理されるかについては、「 CREATE DATABASEを参照してください。

次の例では、AdventureWorks2022 をデタッチした後、AdventureWorks2022 から現在のサーバーに 1 つのファイルをアタッチします。

USE master;
GO
EXEC sp_detach_db @dbname = 'AdventureWorks2022';
EXEC sp_attach_single_file_db @dbname = 'AdventureWorks2022',
    @physname =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf';