1

DB1、DB2、DB3など、いくつかのデータベースがあります。

それらは同一のコード ベースを持つ必要があるため、Visual Studio 2012 で DB プロジェクトを使用し、プロジェクトと UAT/Prod DB1 との比較に基づいてデプロイ用の SQL スクリプトを生成します。次に、このスクリプトが DB1-DBn に適用されます。

この DB プロジェクトの歴史の中で初めて、ハードコーディングされたデータベース名を含む関数を作成する必要がありました。例:

inner join DB1.schema.table1 as t1 on

そして、VS は DB1 が存在しないと信じているように見えるため、そのデータベース参照に関連する多くのエラーが原因で、プロジェクトをビルドできないか、比較を更新できないか、スクリプトを生成できません ([スクリプトの更新] ボタンと [スクリプトの生成] ボタンが無効になっています)。

プロジェクトレベルのSQLCMD変数を追加してデフォルト値$(DB)に設定し、それを次のように使用しようとしましたDB1

inner join [$(DB1)].schema.table1 as t1 on

エラーを回避しますが、違いはないようです。

編集:

循環プロジェクト参照をそれ自体に追加し、手動で追加しようとしていたのと同じ変数をそれに割り当てるという提案がありましたが、それを達成する方法がわかりません。

4

1 に答える 1

2

この記事に従って、参照は次のように手動で抽出され .dacpacたファイルに追加する必要があります。

.dacpac次のコマンドを使用して、ターゲット DB からファイルを抽出します。

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\sqlpackage.exe" /SourcePassword:p /SourceUser:u /Action:Extract /ssn:192.168.2.1 /sdn:DB1 /tf:DB1.dacpac

データベース参照としてそれを含めました。正しい SQLCMD 変数名が自動的に割り当てられ、エラーは消えました。

ソース管理ポイントから、データベース参照を.dacpacファイルに追加すると SQLCMD 変数が自動的に作成されますが、ファイルはプロジェクトに追加されません。使用される.dacpacファイルは、既存のアイテムとしてプロジェクトに追加する必要がありますが、これは一種の不自由です。ソリューション エクスプローラーでそれを行うと、エラーが発生し、代わりにチーム エクスプローラーを使用してそれを行う必要がありました。

于 2015-11-09T20:47:57.350 に答える