我正在用BIML構建多個SSIS包,我必須在日期間隔內從OLE DB源檢索數據。下面是爲需要生成軟件包的XML:BIML Ole db源上的參數化查詢
<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(INT),而不是日期(字符串)。試圖生成包時我收到的錯誤是:
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>
並且它可以工作。有一件事我忘了提,它可能是重要的是,源數據庫管理系統是一個DB2
是否將數據類型添加到Biml幫助中? ' ' –
sorrell
嗨@sorrell,謝謝你的評論。在這種情況下,DataType屬性無效:'Varigence.Languages.Biml.Task.AstVariableParameterMappingNode'。唯一接受的屬性是'VariableName'和'Name' http://www.bimlscript.com/Content/Docs/biml.xsd –