我正在尝试使用Ado.Net Sql命令从带有日期过滤器的表中选择数据。
SELECT COLUMN1
, COLUMN2
FROM TABLENAME
WHERE DATE_INSERTED > @[User::LastInsertDate]
Date_Inserted
和@[User::LastInsertedDate]
都属于DateTime
类型。当我尝试在表达式构建器中计算表达式时,得到以下错误;
表达式可能包含无效令牌,不完整令牌或 一个无效的元素,它可能不是很好,或者可能会丢失 必要元素的一部分,例如括号。
答案 0 :(得分:10)
以下是我对您的问题的理解。我相信你在包范围下创建了两个变量。名为{em> DateTime 数据类型的LastInsertDate
变量和另一个名为{em> String 数据类型的SqlQuery
的变量,用于存储SQL SELECT命令。
您将变量SqlQuery
上的 EvaluateAsExpression 属性设置为 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中的值未包含在双引号中。字符串值应该用双引号括起来。将文本括在双引号中时,不能使用datetime变量LastInsertDate
。您需要将日期时间变量转换为字符串,但如果您只是将datetime值转换为字符串,则可能会出现意外格式。为安全起见,我建议使用DATEPART
函数将日期时间值转换为格式 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)
单击“评估表达式”时,您将在“评估值”部分中看到带有日期时间值的字符串。
希望有所帮助。