3

Ado.Net Sql コマンドを使用して、日付フィルターを使用してテーブルからデータを選択しようとしています。

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

Date_Insertedとはどちらも@[User::LastInsertedDate]タイプDateTimeです。式ビルダーで式を評価しようとすると、次のエラーが発生します。

式に無効なトークン、不完全なトークン、または無効な要素が含まれている可能性があります。形式が正しくないか、括弧などの必須要素の一部が欠落している可能性があります。

4

1 に答える 1

11

これがあなたの質問に対する私の理解です。パッケージスコープで2つの変数を作成したと思います。SQL SELECTコマンドを格納するための、 DateTimeデータ型という名前LastInsertDateの変数とStringデータ型という名前の別の変数。SqlQuery

変数宣言

変数の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に格納しようとしている値が二重引用符で囲まれていないことです。文字列値は二重引用符で囲む必要があります。テキストを二重引用符で囲んでいる間は、datetime変数をそのまま使用することはできませんLastInsertDate。日時変数を文字列に変換する必要がありますが、日時値を文字列に変換するだけでは、予期しない形式になる可能性があります。安全のために、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) 

[式の評価]をクリックすると、[評価値]セクションに日時の値を含む文字列が表示されます。

お役に立てば幸いです。

修正済み

于 2012-10-09T13:22:26.863 に答える