【发布时间】: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