2016-05-30 21 views
1

私はCF9でクエリのクエリを実行しているSQL Serverのストアドプロシージャの出力を持っています。変更を加えるストアドプロシージャへのアクセス権はありませんが、内容を出力できます。空文字列に一致しないクエリのクエリ

私の問題は、私のQofQがいくつかのフィールドで一致していることです。そのうちの1つは、一致しているフィールドの1つに空の文字列を持つレコードを持っています。レコードセットはそのレコードを返すはずですが、レコードセットの一部ではありません。

<cfquery name="test" dbtype="query"> 
SELECT * 
FROM dataLimited 
WHERE market = <cfqueryparam value="" cfsqltype="cf_sql_varchar"> 
</cfquery> 

これは、ストアドプロシージャのダンプ内のレコードを見ることはできますが、ゼロレコードを返します。

+2

文字通り空ですか?それとも、スペースがある可能性がありますか? –

+0

SPから結果をダンプするとき、値は[空文字列] – Nathaniel

答えて

5

フィールドに空の文字列があり、nullではないことは確かですか? CFはNULLと空の文字列を区別するのには適していませんが、クエリのクエリはstill respects the differenceです。すなわち、式を使用します。

WHERE market IS NULL 
+0

です。これは問題であることが判明しましたが、解決方法がわかりません。私のwhere句が: どこの市場がNULL の場合は、私はレコードを取得します。 QoQの制限を考慮して、NULL値をQofQの空の文字列に変換する方法はありますか? – Nathaniel

+0

これは、dbクエリ/プロシージャ内でのみ、またはクエリを手動でループして各値を上書きすることによってのみ実行できます。しかし、 'WHERE Col IS NULL'が予想されるレコードを返す場合、なぜそれらを空の文字列に変換する必要がありますか?単に 'is null'を使用してください。なんらかの理由で*空の文字列とヌルの両方を取得したい場合、 'WHERE'条件で' OR'演算子を使用して両方のフィルタを使用します。 – Leigh

+0

@ Nathanielでは、最初のデータベースクエリで 'coalesce(market、 '')as marketを使用して空文字列にすることができますが、これはおそらく最善の方法ではありません。私は '市場がどこでないか市場= '''と固執することをお勧めします –

0

QofQをループして、後続のQofQを実行してテーブルに動的行を作成しています。したがって、後続のQofQにはWHERE句があります。この句はNULL値(NULL)または非NULL値と一致します。私の解答は、値のlen()をチェックしてから、それ以降のクエリで使用しています:

+2

さて、その部分は最初の質問からはっきりしていませんでした。 * QofQをループして後続のQofQを実行する*元の質問には関係ありませんが、可能な限りループ内でクエリを実行しないようにしてください。 *各行*に対して新しいクエリを実行/構築する必要があるため、非常に効率が悪く、スケーラビリティに乏しい傾向があります。 – Leigh

関連する問題