use*_*891 3 ado.net ssis sqlcommandbuilder
我正在尝试使用Ado.Net Sql命令从带有日期过滤器的表中选择数据.
SELECT COLUMN1
, COLUMN2
FROM TABLENAME
WHERE DATE_INSERTED > @[User::LastInsertDate]
Run Code Online (Sandbox Code Playgroud)
这两个Date_Inserted和@[User::LastInsertedDate]的类型DateTime.当我尝试在表达式构建器中计算表达式时,得到以下错误;
表达式可能包含无效标记,不完整标记或无效元素,可能格式不正确,或者可能缺少必需元素(如括号)的一部分.
小智 10
这是我对你的问题的理解.我相信你在包范围下创建了两个变量.命名为一种可变LastInsertDate的日期时间数据类型和命名为另一个变量SqlQuery的字符串数据类型来存储在SQL SELECT命令.

您将变量的EvaluateAsExpression属性设置SqlQuery为True.然后,您输入以下命令SELECT COLUMN1, COLUMN2 FROM TABLENAME WHERE DATE_INSERTED > @[User::LastInsertDate]

单击EvaluateAsExpression时,您收到以下错误消息:
Expression cannot be evaluated.
Additional information:
Attempt to parse the expression "SELECT COLUMN1, COLUMN2 FROM TABLENAME WHERE DATE_INSERTED > @[User:LastInsertDate]" failed. The expression might contain an invalid token, an incomplete token, or an invalid element. It might not be well-formed, or might be missing part of a required element such as a parenthesis.

这里的问题是,您尝试存储在变量SqlQuery中的值未包含在双引号内.字符串值应该用双引号括起来.将文本用双引号括起来时,不能LastInsertDate按原样使用datetime变量.您需要将日期时间变量转换为字符串,但如果您只是将datetime值转换为字符串,则可能会出现意外格式.为了安全起见,我建议使用DATEPART函数将datetime值转换为格式字符串YYYY-MM-DD hh:mi:ss.这是完成表达式.
"SELECT COLUMN1, COLUMN2 FROM TABLENAME WHERE DATE_INSERTED > '" +
(DT_STR, 4, 1252) DATEPART("yyyy", @[User::LastInsertDate])
+ "-" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm", @[User::LastInsertDate]), 2)
+ "-" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd", @[User::LastInsertDate]), 2)
+ " " + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("hh", @[User::LastInsertDate]), 2)
+ ":" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mi", @[User::LastInsertDate]), 2)
+ ":" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("ss", @[User::LastInsertDate]), 2)
Run Code Online (Sandbox Code Playgroud)
单击"评估表达式"时,您将在"评估值"部分中看到带有日期时间值的字符串.
希望有所帮助.

| 归档时间: |
|
| 查看次数: |
13353 次 |
| 最近记录: |