【发布时间】:2023-03-11 17:25:01
【问题描述】:
【问题讨论】:
-
“公式”,通常。
-
这是否意味着在运行时动态传递它!?
-
是的,这意味着它是在运行时从表达式生成的。
【问题讨论】:
虽然符号是新的,但概念是在 SSIS 2008 中:它仅表示特定任务或组件具有使用 SSIS Expression 设置的一个或多个属性,而不是显式硬编码。
来自文档:
在 SQL Server Data Tools (SSDT) 中,接下来会显示一个特殊的图标标记 到具有表达式集的连接管理器、变量和任务 在他们。 HasExpressions 属性适用于所有 SSIS 对象 支持表达式,但变量除外。该物业 使您能够轻松识别哪些对象具有表达式。
【讨论】:
要以 Kyle 的回答为基础,右键单击执行 SQL 任务并选择属性。在属性窗口中,找到表达式并展开 +。在此之下,您将看到使用表达式设置的所有属性。
我喜欢使用表达式,它们使静态包更加灵活并且能够响应变化。但是,表达式的缺点是您无法调试它们。如果在 Execute SQL Task 上放置断点,则看不到表达式的计算结果。
在我的简单示例中,它没有发生任何事情,因此很容易解析表达式的计算结果。但是,如果我有这样的事情......
"SELECT * FROM " @[User::TableName] + " AS X WHERE X.DayOfWeek ='" + (DATEPART("dw", GETDATE()) == 1 ? "Sunday" : DATEPART("dw", GETDATE()) == 2 ? "Monday" :
DATEPART("dw", GETDATE()) == 3 ? "Tuesday" : DATEPART("dw", GETDATE()) == 4 ? "Wednesday" :
DATEPART("dw", GETDATE()) == 5 ? "Thursday" : DATEPART("dw", GETDATE()) == 6 ? "Friday" :
DATEPART("dw", GETDATE()) == 7 ? "Saturday" : "InvalidDay") + "';"
祝你心理分析好运。
如果我在 SSIS 变量中完成所有工作,我发现在调试复杂表达式方面会更成功。在上面的示例中,我将创建一个名为 Query 的 String 类型的变量。然后我会在变量上使用上面的表达式。然后我将 SqlStatementSource 设置为 @[User::Query] 而不是在任务中执行逻辑。最终结果是相同的,除了现在如果事情表现得“有趣”,我可以在任务上设置一个断点,然后检查我的变量的值,因为它已经过评估。这是一个细微但重要的区别。
【讨论】: