3

我正在尝试使用 Ado.Net Sql 命令从带有日期过滤器的表中选择数据。

SELECT  COLUMN1
    ,   COLUMN2 
FROM    TABLENAME 
WHERE   DATE_INSERTED > @[User::LastInsertDate]

Date_Inserted和都是@[User::LastInsertedDate]类型DateTime。当我尝试在表达式生成器中评估表达式时,出现以下错误;

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

4

1 回答 1

11

这是我对你的问题的理解。我相信您在包范围内创建了两个变量。一个名为DateTimeLastInsertDate数据类型的变量和另一个名为String数据类型的变量,用于存储 SQL SELECT 命令。SqlQuery

变量声明

您将变量的EvaluateAsExpressionSqlQuery属性设置为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 变量。您需要将日期时间变量转换为字符串,但如果您只是将日期时间值转换为字符串,您可能会遇到意外的格式。为了安全起见,我建议使用DATEPART函数将 datetime 值转换为 format 字符串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) 

当您单击 Evaluate Expression 时,您将在 Evaluated value 部分看到带有日期时间值的字符串。

希望有帮助。

已更正

于 2012-10-09T13:22:26.863 回答