Я использую 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.