2017-05-26 11 views
0

SQLパラメータを実際のHashMap値で置き換えるクラスがあります。たとえば、select * from xここで、date =%processingDate%はprocessingDateの値を置き換えて、対応するレコードを取得します。ただし、パラメータ名が列と同じ名前の場合は置換を実行しないように見えます。たとえば、select * from xここで、date =%date%は日付を置き換えず、常に真のブール値のように動作するため、すべてのレコードを取得します。これは予想されるSQLの動作ですか?列名=%列名%SQL

ありがとうございました。

答えて

0

与えられた日付はT-SQLの予約済みキーワードですが、[]で列をラップして列を修飾することをお勧めします。あなたは、あなたの質問にSQLのparamaterを述べ、予約kewords https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql

のリストに

リンク。あなたのパラメータが@dateのように見えるのは、SQLパラメータの場合です。 @接頭辞が付いていない場合は、クエリが列を評価している可能性があります。

私はこのような何かがあなたのために働くだろうと信じて:

--Assuming @dateは* Xから を選択 文字列として評価されている[日] LIKE '%' + @date +「% '

--Evaluates特定値[日] = @date

+0

日が悪い例た xからSELECT * (などと=オペレータとの間の研究の相違)。それは実際には私たちのケースではまったく異なるものですが、これは間違いなく予約語ではありません。具体的には、yがテーブルxの列であれば、y =%y%はすべてのレコードを返します。これは、デバッグしている場合です。 –

+0

これは、あなたが 'replace'機能を実装したプログラミング言語の問題だと思っています。 –

+1

計画ファイルまたはカタログビューで結果として生じるSQLを見ることをお勧めします –