这是一个由两部分组成的问题。是否有最佳实践方法/解决方法可以使用表达式将查询的返回值动态设置到 SSIS 变量中?我研究并阅读了文档,似乎 SSIS 变量表达式存储表达式的值,而不是返回/运行时值。
例如,我想要将最大日期的重新调整值存储在名为 [User::MaxDate] 的变量中,而不是查询字符串。
变量:[用户::MaxDate] 表达式:(SELECT MAX(dateCol) AS dt FROM tblDate)
如果上述不可能,是否有人利用执行 SQL 任务来设置多个变量的值?这里的想法是避免对每个动态变量初始化使用执行 SQL 任务。
我的要求是为主控制流程上的10个变量设置初始值。我试图避免使用 10 个执行 SQL 任务来完成此任务。
在 SSIS(2019 版)中不使用脚本任务或第 3 方插件是否可以实现上述操作?
谢谢你
例如,我想要将最大日期的重新调整值存储在名为 [User::MaxDate] 的变量中,而不是查询字符串。
变量:[用户::MaxDate] 表达式:(SELECT MAX(dateCol) AS dt FROM tblDate)
你是对的,你正在寻找将值存储在 SSIS 变量中。 EvaluateAsExpression 属性设置为 true 的变量意味着它将是动态的,但动态范围是 SSIS 包本身。
在您的情况下,您需要向外部提供商询问信息,因此您无法构建 SSIS 表达式来满足这一要求。
如果您可以在单个查询中获取要存储在 SSIS 变量中的 10 个值,那么是的,您可以通过单个执行 SQL 任务来完成。
如果 10 列都在一个表中,例如控制表,那么您可以进行如下查询
SELECT
MAX(C.SalesFactDate) AS MaxSalesDate
, MAX(C.EmployeeDimDate) AS MaxEmployeeDate
-- etc
FROM
dbo.Control AS C;
如果您需要从实际表中获取日期,那也可以是“单个”查询
SELECT
(SELECT MAX(C.SalesFactDate) FROM dbo.FactSales AS C) AS MaxSalesDate
, (SELECT MAX(C.EmployeeDimDate) FROM dbo.DimEmployees AS C) AS MaxEmployeeDate
-- etc
无论哪种方式,您都将拥有一行数据,其中包含要与 SSIS 变量关联的 1 到 N 列数据。
在主任务执行 SQL 任务屏幕上,将结果集类型从无更改为单行。
在“结果”选项卡上,您将为每列关联一个 SSIS 变量。如果您使用 OLE DB 提供程序,则列名称是从零开始的序数。 ODBC 是基于 1 的序数,ADO.NET 使用命名实体。
假设我创建了各种 Date/db_date/etc 类型的 SSIS 变量,并且使用了 OLE DB 连接管理器,屏幕将如下所示
0|@[User::SalesDate]
1|@[User::EmployeeDate]
等等
这个功能真的有用吗? 我设置了一个 SSIS 包来从查询中获取单个值,并将变量设置为 EvaluateAsAnExpression。 我将执行 SQL 任务设置为使用单行结果集。 我将变量设置为从行集填充,并使用 0 作为“结果名称”,因为我有一个到数据库的 OLE DB 连接以进行查询。 执行 SQL 后变量中的值是 SSIS 变量的默认值(INT32):0。从查询本身来看,该值永远不可能为零(物理上不可能)。 我可能做错了什么? 我可以有变量值的表达式吗? 或者我只需要以这种方式设置属性而不实际使用表达式?