总的来说,对 BI 和 SQL 来说还很陌生,但几个月前我什至不知道模型是什么,现在我在这里......试图构建一个每天运行的包。
目前通过 PowerQuery 运行这是 Excel,但由于数据太多,我必须每个月手动更改查询。决定将其移至 SSIS。
所需结果:提取数据库中的最后一个日期并将其用作模型中的变量(因为我有数百万行,我只想加载日期大于表中日期的行)。
这是我的 Execute SQL Task
:
我为 SQL 查询设置了一个变量
并尝试在我的 OLE DB 查询中使用它
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
错误。我做错了什么/是否有更简洁的方法来完成这项工作?
最佳答案
在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%')
然后点击参数按钮和 map
@[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 命令并选择您创建的字符串变量。
关于sql-server - SSIS:从 SQL 到数据流任务的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804853/