私は、データベースプロジェクトが依存するすべてのSQLポストデプロイメントファイルを読み込むためにMSBuildを使用しています。このデータを読み込まれた1つのメインスクリプトに書き込みます。MSBUILD:ReadLinesFromFileが重複した行を読み取らない
私はすべての必要なファイルを取得する:すべてのファイルは問題なく検出された
<ReadLinesFromFile File="$(ScriptsList)" >
<Output TaskParameter="Lines" ItemName="IncludedFiles"/>
</ReadLinesFromFile>
そして私バッチ彼ら(ListedDataに、すべてのファイル、行ずつ読んで)
<ReadLinesFromFile File='$(ScriptDirectory)$([System.String]::Copy("%(IncludedFiles.Identity))' Condition="$([System.String]::Copy('%(IncludedFiles.Identity)').Substring(0,2))==':r'">
<Output TaskParameter="Lines" ItemName="ListedData"/>
</ReadLinesFromFile>
、その後、Iそれをoutput.sqlに書き込みます。 しかし、ファイルにはいくつかの行がありません。このため、sqlcmdによってoutput.sqlを解析することはできません。
SOURCE:
INSERT INTO [Characteristics] (
[CharacteristicID],
[CharName],
[RuleName],
[ActionRuleName],
[CriteriaSetID],
[ActionCriteriaSetID],
[ListCodeID],
[LocalID],
[BomCategory]
)
SELECT ...something,something... from Characteristics
INSERT INTO [CharacteristicDomain] (
[RuleSet],
[CharName],
[CharSlot],
[Description],
[Seq],
[ValueInteger],
[ValueFloat],
[ValueDate],
[ValueString]
)
SELECT ...something,something... from CharacteristicsDomain
見ての通り、それはアイテムだから、シングル ')ブラケット記号とタスクは最初の行のみを読み込み、すべての重複を無視します(といくつかの行があるでしょうグループではなく、リスト)。だから、実際に私はこのように見てファイルを取得:
OUTPUT:
INSERT INTO [Characteristics] (
[CharacteristicID],
[CharName],
[RuleName],
[ActionRuleName],
[CriteriaSetID],
[ActionCriteriaSetID],
[ListCodeID],
[LocalID],
[BomCategory]
)
SELECT ...something,something... from Characteristics
INSERT INTO [CharacteristicDomain] (
[RuleSet],
[CharName],
[CharSlot],
[Description],
[Seq],
[ValueInteger],
[ValueFloat],
[ValueDate],
[ValueString]
SELECT ...something,something... from CharacteristicsDomain
誰かがMSBuildのを使用してファイルから行を読み込むための方法を知っているが、重複行を失うことはありませんか?
私はExecタスクを使用する方法があると思いましたか?私は確かに自分の仕事を書くことはできませんし、SQLファイルも変更できません(私はユーザーに頼ることができず、必要な方法でファイルをフォーマットします)。 MSBuildでファイルを読む必要があります。なぜなら、それらをsqlcmdにプッシュする前にいくつかのファイルを修正するからです。
私は を使用しています。しかし、私は時間を浪費したくなかったので、私は現在、このタイプの読み取り/書き込み/改造を、read/writeの "type"コマンドとファイルの変更のためのmsbuildtasks.tigris.orgからのタスクを使用して実行しようとしています。私は後であなたの方法を試してみると、これが動作すれば私は投稿します。 –