У меня есть SQL в переменной, которую я хочу использовать в шаблоне BIML. (Первоначально я получал SQL из переменной С#, но это не кажется важным) Я использую BIML следующим образом:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="Source" ConnectionString="Provider=SQLNCLI11;Data Source=localhost\dev2017;Integrated Security=SSPI;Initial Catalog=tempdb;" />
</Connections>
<Packages>
<Package Name="SO_51407483" ConstraintMode="Linear">
<Variables>
<Variable Name="querySql" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="true">
<![CDATA["SELECT --This is a comment
1 AS Col1"]]>
</Variable>
</Variables>
<Tasks>
<Dataflow Name="DFT Demo">
<Transformations>
<OleDbSource Name="OLESRC query" ConnectionName="Source">
<VariableInput VariableName="User.querySql" />
</OleDbSource>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>
Моя проблема заключается в том, что при компиляции файла разрывы строк в querySql кажутся удаленными, но только на этапе проверки компиляции. Это означает, что все, что следует за первым комментарием в querySql, становится частью комментария, и проверка BIML завершается ошибкой.
Сообщение об ошибке:
Запрос узла OLESRC: не удалось выполнить запрос к источнику подключения:
SELECT --Это комментарий1 КАК Col1
Неверный синтаксис рядом с 'SELECT'
Если я изменю querySql, чтобы использовать стиль комментария /* */, проверка пройдет успешно. Если я затем открою сгенерированный файл dtsx и посмотрю переменную в SSIS, разрывы строк снова появятся.
Есть ли способ обойти это без использования /* */ везде?
Эксперименты
Это не компилируется:
<Variable Name="querySql" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="true">
"SELECT --This is a comment
1 AS Col1"
</Variable>
Это компилируется, и результирующая переменная dtsx заканчивается одним разрывом строки.
<Variable Name="querySql" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="true">
"SELECT /*This is a comment*/
1 AS Col1"
</Variable>
Это компилируется, и результирующая переменная dtsx заканчивается двумя разрывами строк.
<Variable Name="querySql" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="true">
"SELECT --This is a comment

1 AS Col1"
</Variable>
Я поднял этот вопрос с Variagence: https://github.com/varigence/BimlPit/issues/ 82а>
newline
, а не сам Biml. Если вы используете переменные, вам придется использовать синтаксис/*...*/
в качестве обходного пути. - person iamdave   schedule 17.08.2018