データベース プロジェクトを複数のデータベース インスタンスに展開するための展開スクリプトを開発しています。手動で実行してテストしています。これは非常に単純なスクリプトであり、基本データベースまたはテンプレート データベースをデプロイするために作成されたデプロイ マニフェストに対して VSDBCMD を実行するだけです。同じサーバー上の異なるデータベースに配置するために、スクリプトは配置マニフェストを使用しますが、/p:DatabaseName プロパティと /p:TargetDatabase プロパティも指定します。
これは一日中働いています。
これらのデータベースには SQL Server 認証を使用しており、ユーザー名とパスワードをスクリプトのパラメーターとして指定できるようにして、ハードコーディングする必要がないようにしたいと考えていました。これを行う唯一の方法は、/ConnectionString スイッチを使用することでした。それが失敗の原因です。配置マニフェストに格納されているものとまったく同じ接続文字列を指定しても、スクリプトは「ターゲット データベース スキーマ プロバイダーを特定できませんでした」というエラーで失敗します。スクリプト:
function DeployDatabase([string] $manifestPath, [string] $password, [string] $instance, [string] $server, [string] $user)
{
$vsdbcmdPath = "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy"
$vsdbcmd = "$vsdbcmdPath\vsdbcmd.exe"
$outputScriptPath = "$instance.sql"
$logPath = "$instance.log"
$connectionString = "Data Source=$server;User ID=$user;"
& $vsdbcmd /dd /dsp:SQL /manifest:$manifestPath /a:Deploy /p:DatabaseName=$instance /p:TargetDatabase=$instance /script:$outputScriptPath /cs:"$connectionString" |
Out-File -FilePath $logPath
}
# Actual call is omitted to protect the $server, $user and $password
/cs スイッチを省略するだけで、これが再び成功します。上記の接続文字列から、失敗を引き起こすために接続文字列でパスワードを指定する必要さえないことに注意してください。
ターゲット データベース サーバーは SQL Server 2008 R2 を実行しており、最新のパッチが適用されています。
このエラーを回避する方法を知りたいです。または、パスワードを配置マニフェストにクリアテキストで含める必要なく、配置時にユーザー名とパスワードを指定するより良い方法を知りたいです。