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

标签 sql-server ssis oledb etl sql-server-data-tools

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

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

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

这是我的 Execute SQL Task :
enter image description here
enter 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错误。

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

最佳答案

在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/

相关文章:

sql - SQL 中的动态 Like 语句

c# - 通过 DSN 通过 SQLServer 链接表与 MS Access 数据库进行 ODBC 连接

sql-server - 为什么 SQL Server 2008 OLE DB UDL 需要显式指定端口 1433?

c# - 读取 Excel 文件 (.xls/.xlsx) 的最佳方式

sql - SQL 中的 SUM 值从另一个表中的特定点开始

sql-server - Azure 数据库无法查询表

sql - SSIS 和 MySQL - 表名分隔符问题

sql-server - 从 Sharepoint 到 SQL Server 的 SSIS Excel/CSV

sql-server - 在 ADO.NET 源编辑器中使用动态表名称

sql-server - SQL OLE DB 驱动程序 msoledbsql.msi 将无法安装