[英]Data not getting fetched from Source using ODBC Connection and passing the SQL Query from a variable
我有一个源查询,其中我使用 ODBC 连接从 Horton 获取数据
Select * from Table1 Where CreationDate > '2020-09-24 00:00:001'
当我手动运行此查询时,它运行良好,但是当我运行我的 SSIS Package 时,没有获取任何数据。
请注意,我正在从变量传递此 SQL 查询,并且所有变量都已正确传递。 我已经使用编辑断点对其进行了检查。
您的查询问题似乎是将 SSIS DateTime 类型转换为字符串表示形式的默认格式。 ODBC 源似乎需要YYYY-MM-DD hh:mm:ss:mss
(其中 mss 是毫秒,但不是正确的格式代码)。
我倾向于将我的长表达式分解为多个变量,然后有一个“简单”的最终形式将它们放在一起。
Date_YYYYMMDD -> (DT_WSTR, 4) YEAR(@[System::ContainerStartTime]) + "-" + RIGHT("0" + (DT_WSTR, 2) MONTH(@[System::ContainerStartTime]),2) + "-" + RIGHT("0" + (DT_WSTR, 2) DAY(@[System::ContainerStartTime]),2)
这构建了我的 YYYY-MM-DD 格式字符串。 数据类型为String
Date_HHMMSSms -> RIGHT("0" + (DT_WSTR, 2) DATEPART( "Hour", @[System::ContainerStartTime] ),2) + ":" + RIGHT("0" + (DT_WSTR, 2) DATEPART( "Minute", @[System::ContainerStartTime] ),2) + ":" + RIGHT("0" + (DT_WSTR, 2) DATEPART( "Second", @[System::ContainerStartTime] ),2) + ":" + RIGHT("0" + (DT_WSTR, 3) DATEPART( "Millisecond", getdate() ),3)
这构建了时间组件。 我一直提倡使用系统变量ContainerStartTime
而不是 GETDATE(),因为每次我们访问它时都会评估 getdate,而容器启动时间对于执行 package 是恒定的。我发现并且迫不及待想写博客的是表达式语言似乎无法从 ContainerStartTime 中获取毫秒数,但对于 GETDATE() 调用可以正常工作。
最终日期变量然后变成类似
Date_Filter -> @[User::Date_YYYYMMDD] + " " + @[User::Date_HHMMSSms]
然后使我的查询用法看起来像
Query_Source -> "Select * from Table1 Where CreationDate > '" + @[User::Date_Filter] + "'"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.