2

Visual Studio 2010 にデータベース プロジェクトがあり、デプロイ後のスクリプトで 2 つのファイルからデータベースにバイナリ データをインポートしたいと考えています。そのために、デプロイ後のスクリプト ファイルから参照されるファイルに、次のようなコードがあります。

INSERT INTO [dbo].[MyTable] ([Column1], [Column2])
SELECT t1.BulkColumn, t2.BulkColumn
FROM 
OPENROWSET(BULK N'$(ProjectDirectory)\Scripts\Post-Deployment\TestData\t1.dat', SINGLE_BLOB) AS t1,
OPENROWSET(BULK N'$(ProjectDirectory)\Scripts\Post-Deployment\TestData\t2.dat', SINGLE_BLOB) AS t2;

これ以前に機能しました。どの時点で機能しなくなったのかはわかりませんが、今はエラーだけが表示されますSQL01262: The variable 'ProjectDirectory' has not been defined(皮肉なことに、デプロイ後のスクリプト自体のエラーの場所、行 0、列 0)。プロジェクトルートの下のファイルを掘り下げたところ、プロジェクトファイル自体で定義されているようなものであることがわかりました。これは、最上位<Project>ノード内に次のものがあります。

<ItemGroup>
  <SqlCommandVariableOverride Include="ProjectDirectory=$(MSBuildProjectDirectory)" />
</ItemGroup>

上記のスニペットで を変更$(ProjectDirectory)$(MSBuildProjectDirectory)ても、エラー メッセージの変数名以外は何も変更されませんでした。エラーは、展開自体ではなく、展開の検証段階で発生します。

配置後のスクリプトで、プロジェクトのルート ディレクトリに関連するファイルを参照し、それらのファイルの内容をデータベース配置に含める正しい方法は何ですか?

4

1 に答える 1

1

私は非常によく似た状況にあります。配置後スクリプトには、sqlcmd を使用する別の sql ファイルが含まれています。

:r "..\..\Another.sql"

Another.sql では、Database.sqlcmdvars で定義された変数を参照していますが、VS は変数が定義されていないと不平を言っていました。プロジェクトファイルを手動で編集しました。PropertyGroup 要素には、子要素の DeploymentConfigFile と SqlCommandVariablesFile が含まれていなかったため、別の PropertyGroup 要素からコピーしました。これが正しい解決策かどうかはわかりませんが、変数を参照できるようになりました。

  <PropertyGroup Condition=" '$(Configuration)' == 'Populate' ">
    <OutputPath>.\sql\Populate\</OutputPath>
    <TargetDatabase>SomeDatabase</TargetDatabase>
    <TargetConnectionString>Data Source=localhost;Integrated Security=True;Pooling=False</TargetConnectionString>
    <DeploymentConfigFile>Properties\Database.sqldeployment</DeploymentConfigFile>
    <SqlCommandVariablesFile>Properties\Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
于 2012-10-17T18:12:23.737 に答える