0

私は、データベースプロジェクトが依存するすべての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にプッシュする前にいくつかのファイルを修正するからです。

答えて

1

どのようにoutput.sqlに書き込みますか? %(ListedData.Identity)でバッチ処理している場合は、一意の行しか表示されません。それを@(ListedData)として使用すれば問題ありません。

+0

私はを使用しています。しかし、私は時間を浪費したくなかったので、私は現在、このタイプの読み取り/書き込み/改造を、read/writeの "type"コマンドとファイルの変更のためのmsbuildtasks.tigris.orgからのタスクを使用して実行しようとしています。私は後であなたの方法を試してみると、これが動作すれば私は投稿します。 –

1

@(ListedData)を作成する2番目のReadLinesFromFileは、エラーがあります。 %(IncludedFiles.Identity)でタスクバッチ処理を使用しているため、 ")"の両方の行が1つのバッチに配置されます。

関連する問題