none
Database をDドライブのフォルダの中に作成するT_SQL RRS feed

  • 質問

  • お世話になります。

     

    SQL Server 2005 Expressを使って、T_SQLの練習中です。

    projectという名前のデータベースをCreate するため、

    Books Onlineに従って、MSSMS Expressで以下のクエリを実行しました。

     

    USE master;
    GO

    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1,
            CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
        FROM master.sys.master_files
        WHERE database_id = 1 AND file_id = 1);

    EXECUTE ('CREATE DATABASE project
    ON
    ( NAME = project_dat,
        FILENAME = '''+ @data_path + 'project.mdf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = project_log,
        FILENAME = '''+ @data_path + 'project.ldf'',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB )'
    );

     

    結果は、仕事で使っているパソコンだと、Cドライブ直下にmdfファイルとldfファイルとが作られ、いつも使っているパソコンでは、

    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data に作られます。

     

    D:\Database\Dataなど、特定のフォルダに出来上がるようにしたいのですが、どうしたらよいのでしょうか?

     

    どうぞよろしくお願いいたします。

    2007年4月25日 15:29

回答

  •  yem さんからの引用

    SET @data_path = (SELECT SUBSTRING(physical_name, 1,
            CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
        FROM master.sys.master_files
        WHERE database_id = 1 AND file_id = 1);

    ここのSETで master.mdf がある場所のフォルダのパスを取得しておいて、

     yem さんからの引用

    EXECUTE ('CREATE DATABASE project
    ON
    ( NAME = project_dat,
        FILENAME = '''+ @data_path + 'project.mdf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = project_log,
        FILENAME = '''+ @data_path + 'project.ldf'',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB )'
    );

    そのフォルダの下にデータファイルを作るように FILENAME に設定していますよね。

     yem さんからの引用

    結果は、仕事で使っているパソコンだと、Cドライブ直下にmdfファイルとldfファイルとが作られ、いつも使っているパソコンでは、

    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data に作られます。

    master.mdf がある場所が異なるのでは?

     yem さんからの引用

    D:\Database\Dataなど、特定のフォルダに出来上がるようにしたいのですが、どうしたらよいのでしょうか?

    FILENAME にそのように設定すればよいのではないでしょうか。

     

    ご参考

    sys.master_files (Transact-SQL)

    CREATE DATABASE (Transact-SQL)

     

    #sys.master_files の database_id = 1 AND file_id = 1 に必ず master.mdf のレコードがあると思ってもよいのだろうか・・・ 

    2007年4月26日 2:40

すべての返信

  •  yem さんからの引用

    SET @data_path = (SELECT SUBSTRING(physical_name, 1,
            CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
        FROM master.sys.master_files
        WHERE database_id = 1 AND file_id = 1);

    ここのSETで master.mdf がある場所のフォルダのパスを取得しておいて、

     yem さんからの引用

    EXECUTE ('CREATE DATABASE project
    ON
    ( NAME = project_dat,
        FILENAME = '''+ @data_path + 'project.mdf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = project_log,
        FILENAME = '''+ @data_path + 'project.ldf'',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB )'
    );

    そのフォルダの下にデータファイルを作るように FILENAME に設定していますよね。

     yem さんからの引用

    結果は、仕事で使っているパソコンだと、Cドライブ直下にmdfファイルとldfファイルとが作られ、いつも使っているパソコンでは、

    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data に作られます。

    master.mdf がある場所が異なるのでは?

     yem さんからの引用

    D:\Database\Dataなど、特定のフォルダに出来上がるようにしたいのですが、どうしたらよいのでしょうか?

    FILENAME にそのように設定すればよいのではないでしょうか。

     

    ご参考

    sys.master_files (Transact-SQL)

    CREATE DATABASE (Transact-SQL)

     

    #sys.master_files の database_id = 1 AND file_id = 1 に必ず master.mdf のレコードがあると思ってもよいのだろうか・・・ 

    2007年4月26日 2:40
  • かめたろ さん、ありがとうございます。

     

    『FILENAME にそのように設定すればよいのではないでしょうか。』

    とのことで、早速

    SET @data_path = 'D:\DataBase\Data\';

    としたところ、指定のフォルダにデータベースが出来上がりました。

     

    SET @data_path = (SELECT SUBSTRING(physical_name, 1,
            CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
        FROM master.sys.master_files
        WHERE database_id = 1 AND file_id = 1);

    の意味をまるっきり理解していなかったために、

    FILENAMEに何を指定するのかわからなかったのでした。

     

    そのため、

    『#sys.master_files の database_id = 1 AND file_id = 1 に必ず master.mdf のレコードがあると思ってもよいのだろうか・・・』

    との助言も、さっぱりわかりませんでした。

     

    意味がわかって逆に「あっ、なーんだ!」と。勉強になりました。

    2007年4月29日 1:31