2

SQLCMD を介して次のコマンドを発行したいと思います。

IF DB_ID('My_DB') IS NOT NULL DROP DATABASE My_DB

若干の注意点はありますが…

  1. データベース名は動的です
  2. コマンド (BuildForge) を実行しているプログラムは、単一引用符で囲まれた変数を置き換えません。

だから、私は使用できません:

-Q"IF DB_ID('${db_name}') IS NOT NULL DROP DATABASE ${db_name}

一重引用符でリテラル ${db_name} を使用するためです。私も使用できません:

-Q"IF DB_ID("${db_name}") IS NOT NULL DROP DATABASE ${db_name}

二重引用符の最初と最後で SQLCMD がつまずくためです。

スクリプトを作成してデータベース名のパラメーターを渡すことができることはわかっていますが、スクリプトを使用せずに 1 つのコマンド ラインでこれを行う方法はありますか? 二重引用符などをエスケープする方法はありますか? 文字列を正しく構築できる BuildForge 構文はありますか?

ありがとう!

4

1 に答える 1

2

私は通常、これを行うために -q とスクリプトを使用しますが、いくつかの考え...

あなたはこれができますか?

-Q"IF DB_ID(RTRIM(LTRIM('    ${db_name}    '))) IS NOT NULL DROP DATABASE ${db_name}"

それともこれ?

-Q"BEGIN TRY DROP DATABASE ${db_name} END TRY BEGIN CATCH IF ERROR_NUMBER() <> 3701 RAISERROR('some error not related to db not there', 16, 1) END CATCH"
于 2010-07-21T17:55:50.947 に答える