我在VS 2017和SQL Server 2016中使用SSIS。
我想知道以下方法与在SQLStatement
中设置Execute SQL Task
的值之间有什么区别:
第一条路
第二种方式
在两种方式中,我都使用变量来分配SQLStatement
的值,但是在第一个中,我直接设置了它的值,在第二个中,我使用了表达式。
答案 0 :(得分:3)
如果SQL Command是基于其他变量构建的,则可以使用第二个参数,例如动态传递表名或由于 Execute SQL Task不支持参数化查询而传递参数 :
"SELECT * FROM [" + @[User::SchemaName] + "].[" + @[User::TableName] + "]"
我记得,在旧的SSIS版本中,第一个选项不可用。然后在以后的(我认为是2012年)版本中添加它,以方便开发人员进行工作,以防整个SQL命令存储在变量中,而不是添加一个变量表达式:
@[User::strQuery]
基于Execute SQL Task official documentation:
可变选项(第一种方法)
将源设置为定义Transact-SQL语句的变量。选择此值将显示动态选项SourceVariable。
表达用例(第二种方法)
在使用OLE DB连接管理器时,不能使用参数化的子查询,因为Execute SQL Task无法通过OLE DB提供程序派生参数信息。但是,您可以使用表达式将参数值连接到查询字符串中,并设置任务的SqlStatementSource属性。
此更新是对以下评论的回复:
我们可以在变量中有一个动态值,然后直接在我们的SQL语句中设置它。
两个方法都将得到相同的结果,但是如果您需要在不同的任务中使用SQL语句,则应使用变量并使用EvaluateAsExpression
选项,以避免多次编写Expression (Harder to稍后再编辑软件包)。否则,只需在Task中定义表达式即可,无需声明动态变量。