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