SSIS:从SQL到数据流任务的变量

问题描述 投票:6回答:2

一般来说,这对BI和SQL来说还很陌生,但是几个月前,我什至不知道模型是什么,现在,我在这里...试图构建一个每天运行的软件包。

当前正在通过PowerQuery运行Excel,但是由于数据太多,我不得不每月手动更改查询。决定将其移入SSIS。

[必选结果:提取数据库中的最后一个日期并将其用作模型中的变量(因为我有数百万行,所以我只想加载日期大于表中已有日期的行)。

这是我的Execute SQL Taskenter image description hereenter image description here

我为SQL查询设置了一个变量enter image description here

并尝试像这样在我的OLE DB查询中使用它enter image description here

[Execute SQL Task:结果,很好-返回日期为“ dd / mm / yyyy hh24:mi:ss”]

SELECT MAX (CONVACCT_CREATE_DATE) AS Expr1 FROM GOMSDailySales

Variable for OLE DB SQL Query

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE (CREATE_DATE > TO_DATE(@[User::GetMaxDate],'yyyy/mm/dd hh24:mi:ss'))
AND (FIN_ACCT_NO LIKE '1%')"

[当前出现missing expression错误,如果将" ' "添加到我的@[User::GetMaxDate]中,则会出现year must be between 0 and xxxx错误。

我在做什么错/有没有更干净的方法来完成此任务?

sql-server ssis oledb etl sql-server-data-tools
2个回答
2
投票

在OLEDB源中使用以下命令,将数据访问模式更改为SQL命令,然后使用以下命令:

SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE (CREATE_DATE > TO_DATE(?,'yyyy/mm/dd hh24:mi:ss'))
AND (FIN_ACCT_NO LIKE '1%')

然后单击参数按钮并将@[User::GetMaxDate]映射到第一个参数。

有关更多信息,请检查以下答案:Parameterized OLEDB source query

替代方法

如果您使用的OLE DB提供程序不支持参数,请创建字符串类型的变量并将该变量评估为以下表达式:

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE CREATE_DATE > TO_DATE('" + (DT_WSTR, 50)@[User::GetMaxDate] +
"' ,'yyyy/mm/dd hh24:mi:ss') AND FIN_ACCT_NO LIKE '1%'"

然后从OLE DB源中,更改数据访问模式-SQL变量中的命令并选择您创建的字符串变量。


1
投票

您试图像查询中的变量一样使用SSIS变量。在字符串变量中构造SQL查询时,您只需要将字符串连接在一起。您的查询字符串变量的表达式应如下所示。

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE CREATE_DATE > " + @[User::GetMaxDate] +
"AND (FIN_ACCT_NO LIKE '1%')"
© www.soinside.com 2019 - 2024. All rights reserved.