【问题标题】:SSIS: How to use project.params in WHERE clauseSSIS:如何在 WHERE 子句中使用 project.params
【发布时间】:2017-11-01 19:40:08
【问题描述】:

我有几个包,它们都有以下 WHERE 子句:

WHERE CreatedColumn >= DATEADD(DAY, -14, GETDATE())

我希望能够同时更改所有包的该值。所以我在 project.params 中添加了 CreateDateTime 作为字符串,值为 DATEADD(DAY, -14, GETDATE())

然后在我的包变量中添加了带有实际查询的 SourceQuery:

"SELECT * FROM MyTable WHERE CreatedColumn >= " + @[$Project::CreatedDateTime] + ";"

在 ExpressionBuilder 中出现错误:

表达式可能包含无效标记、不完整标记或无效元素。它可能格式不正确,或者可能缺少括号等必需元素的一部分。

如果我通过将 $ 符号删除来更改我的实际查询:

"SELECT * FROM MyTable WHERE CreatedColumn >= " + @[Project::CreatedDateTime] + ";"

我的错误变为:

在变量集合中找不到变量“Project::CreatedDateTime”。该变量可能不存在于正确的范围内。

【问题讨论】:

  • 我对此进行了测试,您的第一个表达式对我来说很好 - 这是一个非常基本的串联。如果只将参数添加到表达式中会发生什么?
  • 如果我使用 SqlCommand 并且只执行简单的 SELECT... WHERE CreatedColumn >= @[$Project::CreatedDateTime] 那么我会收到以下错误:OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“无法准备语句。”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80040E14 描述:“必须声明标量变量“@”。” 我想补充一点,我的查询在选择和连接方面相当长,但它只需要在 WHERE 中进行简单的串联。
  • 对不起。我终于弄明白了。 SqlCommand 底部有一个尾随的 sql 注释,它使其他所有内容都失败了。我没有用双引号将 sql 注释括起来。

标签: ssis


【解决方案1】:

Sql 命令:SELECT * FROM MyTable WHERE CreatedColumn >=?

并右键单击参数选项卡并分配变量 Project::CreatedDateTime

【讨论】:

  • 使用 OLEDB 数据源,我用“?”尝试了我的 Sql 命令参数并得到以下错误:无法从 SQL 命令中提取参数。提供程序可能无法帮助解析命令中的参数信息。在这种情况下,使用“来自变量的 SQL 命令”访问模式,其中整个 SQL 命令存储在一个变量中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2020-11-30
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多