MSBUILD: ReadLinesFromFile не читает дублированные строки - PullRequest
0 голосов
/ 07 июля 2011

Я использую MSBuild для чтения всех файлов SQL после развертывания, от которых зависит мой проект базы данных, и я записываю эти данные в один загруженный основной скрипт.

Я получаю все необходимые файлы:

<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>

Все файлы найдены без проблем, и затем я записываю их в output.sql. Но в файле отсутствует несколько строк, что делает вывод output.sql невозможным для анализа по sqlcmd.

ИСТОЧНИК:

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

Как видите, будет несколько строк с одним знаком ')', и задача считывает только первую строку, а затем игнорирует все дубликаты (потому что это группа элементов, а не список). По сути, я получаю файл, похожий на этот:

ВЫВОД:

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.

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Ваш второй ReadLinesFromFile, тот, который создает @ (ListedData), виноват.Он использует пакетное задание с% (IncludedFiles.Identity), поэтому обе строки с ")" будут помещены в один пакет.

1 голос
/ 07 июля 2011

Как вы пишете в output.sql?Если вы используете% (ListedData.Identity), то это даст вам только уникальные строки.Используйте его как @ (ListedData), и все должно быть в порядке.

...