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

SSIS: Variable from SQL to Data Flow Task

对 BI 和 SQL 来说是一个新手,但几个月前我什至不知道什么是模型,现在我正在...尝试构建一个每天运行的程序包。

目前 运行 这是 Excel 通过 PowerQuery,但由于数据太多,我必须每个月手动更改查询。决定将其移至 SSIS。

要求的结果:在我的数据库中提取最后一个日期并将其用作模型中的变量(因为我有数百万行,我只想加载日期大于我在 table 已经)。

这是我的Execute SQL Task

我为 SQL 查询设置了一个变量

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

Execute SQL Task:结果,很好 - returns 日期为 "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 错误。

我做错了什么/有没有更简洁的方法来完成这项工作?

您试图将 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%')"

在 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 来自变量 的命令和 select 您创建的字符串变量。