这是原始查询,使用它可以正常工作ado.net
源并使用源中指定的 .netproviders\odbc 数据提供程序。
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= '6/30/2011' AND DM_ROW_E_DT <= '6/30/2011'
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '6/30/2011' AND a.DM_ROW_E_DT <= '6/30/2011'
但我需要使其自动化,以便在 DATE 从 sql server 中的表中获取值。我创建了一个变量来存储该日期值,但我想使用该变量作为参数传递到上面的查询。不幸的是,我没有找到数据访问模式:来自 ado.net 源中变量的 sql 命令。我搜索了其他一些网站,发现我们可以使用表达式生成器来使用一些表达式。 rt 单击预属性 ..> 表达式 ..> 等 .. 成功评估表达式。表达式如下所示,但我在那里受到了打击。下一步是什么 ?如何将求值表达式作为 ado.net source 中的源命令传递?请帮忙。
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= '@[User::RepDate]' AND DM_ROW_E_DT <= '@[User::RepDate]'
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '@[User::RepDate]' AND a.DM_ROW_E_DT <= '@[User::RepDate]'
Update
Hi,
非常感谢您的回复。正如您所指定的,我创建了一个带有日期时间的用户变量 user:RepDate 和一个将日期时间分配给该变量 RepDate 的执行 sql 任务。是的,我能够评估表达式,并且能够看到在 ado.net souce sql 命令模式下构建的查询。这是查询:
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= @[User::RepDate] AND DM_ROW_E_DT <= @[User::RepDate]
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= @[User::RepDate] AND a.DM_ROW_E_DT <= @[User::RepDate]
但我收到下面给出的以下错误。我认为这是因为内部查询期望日期格式为“mm/dd/yyyy”,正如我在原始查询中指定的那样。但是我们从用户变量中提供日期时间。
您能告诉我如何使用内置函数将用户变量的日期时间格式转换为指定格式吗?我尝试了 DT_DAte 但没有运气。
Error at Data Flow Task 4 [ADO NET Source [1]]: The component "ADO NET Source" (1) was unable to retrieve column information for the SQL command. The following error occurred: ERROR [42601] [IBM][CLI Driver][DB2] SQL0104N An unexpected token "[" was found following "". Expected tokens may include: "CONCAT || / MICROSECONDS MICROSECOND SECONDS SECOND MINUTES". SQLSTATE=42601
ADDITIONAL INFORMATION:
Pipeline component has returned HRESULT error code 0xC02020FF from a method call. (Microsoft.SqlServer.DTSPipelineWrap)
BUTTONS:
OK
***更新2***
标题:微软 Visual Studio
数据流任务 [ADO NET 源 [1]] 出错:组件“ADO NET 源”(1) 无法检索 SQL 命令的列信息。发生以下错误: ERROR [22007] [IBM][CLI Driver][DB2] SQL0180N 日期时间值的字符串表示形式的语法不正确。 SQLSTATE = 22007
附加信息:
管道组件已从方法调用返回 HRESULT 错误代码 0xC02020FF。 (Microsoft.SqlServer.DTSPipelineWrap)
BUTTONS:
OK