2012-02-16 8 views
2

私はポスト・デプロイスクリプトで、私はデータベースに二つのファイルからバイナリデータをインポートしたいのVisual Studio 2010でのデータベースプロジェクトを持っています。そのために、私はポスト・デプロイスクリプトファイルから参照されるファイルに次のように非常に多くのコードを持っている:データベースプロジェクトを展開する際に、プロジェクトルートを基準にファイルを参照する方法は?

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>ノード内で次のを持っている:

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

$(MSBuildProjectDirectory)に変更上記のスニペットでエラーメッセージ内の変数名以外は何も表示されません。このエラーは、デプロイメントの検証段階で発生し、デプロイメント自体では発生しません。

デプロイメント後のスクリプトで、プロジェクトのルートディレクトリを基準にした参照ファイルを、データベース配備に含めるための正しい方法は何ですか?

答えて

1

は、私は非常に似たような状況があります。配置後スクリプトはAnother.sqlで

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

は、私がDatabase.sqlcmdvarsとVSは変数が定義されていないことを訴えてた中で定義された変数を参照のsqlcmdを使用して別のSQLファイルが含まれています。私はプロジェクトファイルを手動で編集しました。 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>