1

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

“选择 * FROM ?WHERE DATE_REF = ?和 ATS = ?”

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

在此先感谢您的帮助!

4

1 回答 1

2

这样做的方法是在另一个字符串变量中创建查询,该变量具有以下表达式:

"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 子句中使用带有问号的变量,然后像往常一样传递参数。

于 2017-08-15T22:16:29.737 回答