none
カーソル変数を使用してデータベースの作成をしたい RRS feed

  • 質問

  • いつもお世話になっております。

     

    SQL Server2000を使用して、データベースを作成しているのですが、
    データベース名やファイルのパスなどをカーソル変数を使用して
    設定したいと考えています。

     

    自分なりにやってみたのですが、
    どうしても構文エラーとなってしまいます。

    普通に作成する分には問題ないので、カーソル変数の使用方法が間違っているのだと思います。

    (カーソル変数を使用しなければ、うまくいきます。)

    以下が作成したSQLです。


    Code Snippet

    DECLARE @DATABASE_PATH nvarchar(256)
    DECLARE @DATABASE_NAME nvarchar(256)

    SET @DATABASE_PATH = 'C:\Sample\'
    SET @DATABASE_NAME = 'Sample'


    CREATE DATABASE @DATABASE_NAME 
    --↑Sampleデータベースを作成したいと考えています。
    ON
    ( NAME = @DATABASE_NAME + '_dat',
    --↑Sample_datと設定したいです。
        FILENAME = @DATABASE_PATH + @DATABASE_NAME + '_dat.mdf'
    --↑C:\Sample\Sample_dat.mdfと設定したいです。
    )
    LOG ON
    ( NAME = @DATABASE_NAME + '_log',
    --↑Sample_logと設定したいです。
        FILENAME = @DATABASE_PATH + @DATABASE_NAME + '_dat.mdf'
    --↑C:\Sample\Sample_log.ldfと設定したいです。
    )

     

     


    http://msdn.microsoft.com/ja-jp/library/ms176061.aspx
    上記ページを参考に作成してみたのですが、
    うまく理解できませんでした。

     

    もしよろしければ、アドバイス頂けませんか?
    よろしくお願い致します。

    2008年8月21日 11:48

回答

  • CREATE DATABASEを直接実行する場合、変数を指定することはできません。

    該当ページのcodesnipetを良く見れば理解できると思いますが、この例では、
    CREATE DATABASEのSQLは文字列として動的に生成しており、それをEXECUTEで実行しています。

    同様の方法を取る必要があります。
    2008年8月22日 0:01
  • 正直なところ、このMSDNのcodesnippetは分かりにくいように感じました。
    これが、以下のようになっていれば、直感的にぴぴっと理解できると思うのですが...。

     

    Code Snippet

    DECLARE @Query VARCHAR(8000)

     

    --> CREATE DATABASE文の組み立て
    SET @QUery = 'CREATE DATABASE...' + @data_path + '...'

    <-- ここまで

     

    EXECUTE( @Query )

     

     

     

     

     

    2008年8月22日 4:05

すべての返信

  • CREATE DATABASEを直接実行する場合、変数を指定することはできません。

    該当ページのcodesnipetを良く見れば理解できると思いますが、この例では、
    CREATE DATABASEのSQLは文字列として動的に生成しており、それをEXECUTEで実行しています。

    同様の方法を取る必要があります。
    2008年8月22日 0:01
  • ご回答ありがとうございます。

     

    理解できました。
    SQLを最小化して実行して確認しました。

     

    Code Snippet

    DECLARE @DATABASE nvarchar(256)
    SET @DATABASE = 'SAMPLE'

    EXECUTE ('
    CREATE DATABASE ' + @DATABASE
    )

     

     


    動的にSQLを作成するのは、少し大変ですね。
    勉強になりました。
    ありがとうございます。

     

    2008年8月22日 0:58
  • 正直なところ、このMSDNのcodesnippetは分かりにくいように感じました。
    これが、以下のようになっていれば、直感的にぴぴっと理解できると思うのですが...。

     

    Code Snippet

    DECLARE @Query VARCHAR(8000)

     

    --> CREATE DATABASE文の組み立て
    SET @QUery = 'CREATE DATABASE...' + @data_path + '...'

    <-- ここまで

     

    EXECUTE( @Query )

     

     

     

     

     

    2008年8月22日 4:05
  • ありがとうございます。

     

    とても分かりやすかったです。

    正直試行錯誤しながらSQLは作成しましたが、

    うまく理解しきれていなかったので、とても助かりました。

     

    ご教示頂いた方法でSQLを作成しました。

     

    Code Snippet

    DECLARE @Query VARCHAR(8000)
    DECLARE @DATABASE VARCHAR(256)
    DECLARE @DATA_PATH VARCHAR(256)

     

    SET @DATABASE = 'SAMPLE'
    SET @DATA_PATH = 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\'
     
    --> CREATE DATABASE文の組み立て
    SET @Query =
    'CREATE DATABASE ' + @DATABASE +
    ' ON
    ( NAME = ' + @DATABASE + '_dat,
      FILENAME = ''' + @DATA_PATH + @DATABASE + '_dat.mdf''
    )
    LOG ON
    ( NAME = ' + @DATABASE + '_log,
      FILENAME = ''' + @DATA_PATH + @DATABASE + '_log.ldf''
    )'
    --< ここまで

     

    --クエリの実行
    EXECUTE( @Query )

     

     

    とても参考になりました。

    ありがとうございます。

     

    2008年8月22日 12:58