【问题标题】:ssis dynamic t-sql statement with use of parameter as table name使用参数作为表名的 ssis 动态 t-sql 语句
【发布时间】:2023-03-05 22:14:01
【问题描述】:

我已经下载了 Visual Studio 2015 和 SQL Data Tools 2015,因为我正在尝试制作一个简单的 SSIS 包,用于将服务器上数据库中的表中的一些数据行复制到另一台服务器上另一个数据库中的表中.我有一些使我的工作更加困难的复​​杂情况,例如需要动态构建表名。直到现在我已经创建了一个执行 Sql 任务来删除目标表中的数据以避免重复行。在我附加的输出中由 Ole DB 源和 Ole DB 目标组成的数据流活动。我必须为将来安排此包的执行。 目前我已经创建了三个包变量:“tablename”、“date”和“ats”。我正在尝试将这些变量作为 Execute Sql Task 编辑器和 Ole DB Source 编辑器上的参数传递给动态 t-sql 语句。不幸的是,当我在 sql 命令编辑器中输入这样的查询时,我遇到了一些构建错误:

“SELECT * FROM ? WHERE DATE_REF = ? AND ATS = ?”

如果我使用表名而不是第一个问号,我没有构建错误,那么在这种动态 t-sql 状态的特殊情况下,如何使用变量或参数作为表名?我也尝试过使用 @[User::tablename] 而不是第一个问号,但出现了新的构建错误。

提前感谢您的帮助!

【问题讨论】:

标签: package scheduled-tasks dynamic-sql tablename ssis


【解决方案1】:

这样做的方法是在另一个字符串变量中创建查询,其表达式为:

"SELECT * FROM " + @[User::tablename] + " WHERE DATE_REF = '" + @[User::date] + "' AND ATS = '" + @[User::ats] + "'"

(请注意,我假设您的日期以可以注入 SQL 语句的格式保存在字符串变量中 - 如果不是,您需要进一步操作才能将其放入这个新的字符串变量中。 )

如何使用:

在 OLE DB 源组件中:使用“数据访问模式:”字段中的“来自变量的 SQL 命令”选项,然后从下面的下拉框中选择新变量。

在执行 SQL 任务中:将“SQLSourceType”设置为“Variable”,然后从下面的下拉框中选择新变量(“SourceVariable”)。

"SELECT * FROM " + @[User::tablename] + " WHERE DATE_REF = '" + @[User::date] + "' AND ATS = '" + @[User::ats] + "'"

请注意,对于执行 SQL 任务,您还可以在 WHERE 子句中使用带有问号的变量,然后像往常一样传递参数。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多