我正在使用 BIML 构建多个 SSIS 包,并且我必须在日期间隔之间从 OLE DB 源中检索数据。这是要生成包的xml:
<Dataflow Name="DFT Insert into <#=TableName#>">
<Transformations>
<OleDbSource Name="Retreive from Source (<#=TableName#>)" ConnectionName="AS400">
<DirectInput>
SELECT s.*
FROM <#=TableSchema#>.<#=TableName#> s
WHERE s.date > ? AND s.date <= ?
</DirectInput>
<Parameters>
<Parameter Name="0" VariableName="User.StartDate"/>
<Parameter Name="1" VariableName="User.MiddleDate"/>
</Parameters>
</OleDbSource>
<OleDbDestination Name="Insert into Destination (<#=TableName#>)" ConnectionName="DB2Mirror" KeepNulls="true" CheckConstraints="false">
<ExternalTableOutput Table="[<#=TableSchema#>].[<#=TableName#>]" />
</OleDbDestination>
</Transformations>
</Dataflow>
这种结构通常可以工作,因为我已经尝试过了,但使用的是 ID(整数)而不是日期(字符串)。我在尝试生成包时收到的错误如下:
Could not execute Query on Connection AS400
OleDbCommand.Prepare method requires all variable length parameters to have an explicitly set non-zero Size.
我知道我可以创建一个 ssis 变量并将查询中的日期连接为表达式,但我想坚持<DirectInput>
使用<VariableInput>
附加信息
变量中的日期时间(对不起,我忘了提到它是日期时间,但我认为它没有太大变化)格式是正确的:yyyy-mm-dd hh:mm:ss。我很确定格式没有问题,因为我尝试创建一个变量作为表达式,像这样连接日期:<Variable Name="Query" DataType="String" EvaluateAsExpression="true">"SELECT * FROM table WHERE col > '" + @[User::StartDate] + "'"</Variable>
并且它有效。我忘了提到的一件事可能很重要,源 dbms 是一个 db2