繁体   English   中英

未使用 ODBC 连接从源获取数据并从变量传递 SQL 查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM