当前位置: 首页 > 知识库问答 >
问题:

使用参数作为表名的ssis动态t-sql语句

郝修为
2023-03-14

我下载了Visual Studio2015和SQL Data Tools 2015,因为我正在尝试制作一个简单的SSIS包,用于将一些数据行从服务器上的db中的表复制到另一个服务器上的另一个db中的表。我有一些复杂的问题使我的工作更加困难,例如需要动态地构建表名。到目前为止,我已经创建了一个执行Sql任务,用于删除目标表中的数据,以避免重复行。在输出中,我附加了一个数据流活动,包括一个Ole db源和一个Ole db目的地。我必须为以后安排这个包的执行。目前,我已经创建了三个包变量:“tableName”、“date”和“ats”。我试图将这些变量作为Execute Sql任务编辑器和Ole DB源代码编辑器的参数传递给动态t-sql语句。不幸的是,在sql命令编辑器中输入以下查询时,我遇到了一些构建错误:

“SELECT*FROM?其中DATE_REF=?和ATS=?”

如果我使用表名而不是第一个问号,我没有构建错误,那么在这种特殊的动态t-sql状态中,我如何使用变量或参数作为表名呢?我还尝试了@[user::TableName]来代替第一个问号,但我发现了一个新的构建错误。

提前感谢您的帮助!

共有1个答案

谭繁
2023-03-14

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

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

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

如何使用:

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

注意,对于Execute SQL任务,您还可以在WHERE子句中使用带问号的变量,然后像通常那样传入参数。

 类似资料:
  • 问题内容: 我正在尝试执行这样的mysql查询 它显示这样的错误 我该如何实现? 问题答案: 在查询中动态表名的使用最好与 Prepared Staments一起使用 ,在mysql中也可以使用串联功能 您也可以针对删除查询执行此操作

  • 我有一个SSIS包,它有一个Execute SQL任务,其中有一个INSERT语句,它将日志数据插入到跟踪执行时间的smss中的SSIS跟踪表中。每次尝试执行任务时,都会出现以下错误:[execute SQL task]错误:执行查询“INSERT INTO DBO.ssis_logging_details(execution_in...”失败,错误为:“必须声明标量变量”@execguid“。”

  • 问题内容: 这可能吗?例如 如果没有,我应该这样做吗: 还是我需要学习其他技巧? 问题答案: 表名和列名不能用PDO中的参数替换。请参见PHP PDO语句可以接受表名或列名作为参数吗?

  • 问题内容: 我在为查询中的字段生成别名时遇到问题,例如,该字段为我提供了去年和前一年的收入。我的理解是我可以做些类似的事情: 但这是行不通的。有人知道如何做到这一点吗? 我想以一张桌子结束 在此先多谢! 问题答案: DECLARE @sql VARCHAR(1000); SET @sql = ‘SELECT 1234 AS REVENUE’ + CAST (year(DATEADD(year,-1

  • 我有一组平面文件(114个文件),每个文件都用数据库表名命名。我有数据库模式,所以我的数据库准备好了,没有记录在其中。 我所要做的就是,处理这些平面文件,并将这些记录插入到相应的表中。 我创建了一个SSIS包,我正在尝试在Ole DB目标中设置动态表名。 messageBox提供了所需的数据。但Ole DB目标表无法识别第二个循环中的表名。 “ActiveCompositionGenericID”

  • 好的,我有一张像这样的桌子 现在我需要把它变成这样: 我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。 有人能帮忙吗?