简体   繁体   English

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

[英]SSIS: Variable from SQL to Data Flow Task

Pretty new to BI and SQL in general, but a few months ago I didn't even know what a model is and now here I am...trying to build a package that runs daily.总的来说,对于 BI 和 SQL 来说还很陌生,但几个月前我什至不知道模型是什么,现在我在这里......试图构建一个每天运行的包。

Currently running this is Excel via PowerQuery but because the data is so much, I have to manually change the query every month.目前通过 PowerQuery 运行这是 Excel,但由于数据太多,我必须每个月手动更改查询。 Decided to move it into SSIS.决定将其移至 SSIS。

Required outcome: Pull the last date in my Database and use it as a variable in the model (as I have millions of rows, I only want to load lines with dates greater than what I have in my table already).所需结果:提取数据库中的最后一个日期并将其用作模型中的变量(因为我有数百万行,我只想加载日期大于表中日期的行)。

Here is my Execute SQL Task :这是我的Execute SQL Task 在此处输入图片说明 在此处输入图片说明

I set up a variable for the SQL query我为 SQL 查询设置了一个变量在此处输入图片说明

and trying to use it in my OLE DB query like this并尝试在我的 OLE DB 查询中使用它在此处输入图片说明

Execute SQL Task : results, are fine - returns date as "dd/mm/yyyy hh24:mi:ss" Execute SQL Task :结果很好 - 将日期返回为“dd/mm/yyyy hh24:mi:ss”

SELECT MAX (CONVACCT_CREATE_DATE) AS Expr1 FROM GOMSDailySales

Variable for OLE DB SQL Query : 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%')"

Currently getting missing expression error, if I add " ' " to my @[User::GetMaxDate] , I get a year must be between 0 and xxxx error.当前missing expression错误,如果我将" ' "添加到我的@[User::GetMaxDate] ,我会得到一个year must be between 0 and xxxx错误。

What am I doing wrong / is there a cleaner way to get this done?我做错了什么/是否有更简洁的方法来完成这项工作?

In the OLEDB source use the following, change the data access mode to SQL command , and use the following command:在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%')

And click on the parameters button and map @[User::GetMaxDate] to the first parameter.然后单击参数按钮并将@[User::GetMaxDate]映射到第一个参数。

For more information, check the following answer: Parameterized OLEDB source query有关更多信息,请查看以下答案: 参数化 OLEDB 源查询

Alternative method替代方法

If parameters are not supported in the OLE DB provider you are using, create a variable of type string and evaluate this variable as the following expression:如果您正在使用的 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%'"

Then from the OLE DB source, change the data access mode the SQL Command from variable and select the string variable you created.然后从 OLE DB 源,从变量中更改数据访问模式SQL 命令并选择您创建的字符串变量。

Your trying to use the SSIS variable like a variable in the query.您尝试将 SSIS 变量用作查询中的变量。 When constructing a SQL query in a string variable you simply need to concatenate the strings together.在字符串变量中构造 SQL 查询时,您只需将字符串连接在一起。 The expression for your query string variable should look like this.查询字符串变量的表达式应如下所示。

"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%')"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM