我在BIML模板中要使用的变量中有一些SQL。 (本来我是从C#变量获取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 AS 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
答案 0 :(得分:1)
作为最低限度的复制,我保留了回车/换行符。
我声明我的查询变量,然后在“执行SQL任务”和数据流的OLEDB源代码中使用它。
在单击省略号之前,“执行SQL任务”看起来并没有保留CR / LF,但是弹出窗口正确显示了代码。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<#
string query = @"--This is a comment
SELECT 1 AS Col1";
#>
<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">
<Tasks>
<ExecuteSQL Name="SQL Test Task" ConnectionName="Source">
<DirectInput><![CDATA[<#=query#>]]></DirectInput>
</ExecuteSQL>
<Dataflow Name="DFT Demo">
<Transformations>
<OleDbSource Name="OLESRC query" ConnectionName="Source">
<DirectInput><![CDATA[<#=query#>]]></DirectInput>
</OleDbSource>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>