されていない場合、私はこのような何かを見ることができるいくつかの変数のセットがあります。SQL条件付きで参加変数がNULL
SET @ItemID1 = 3
SET @ItemID2 = 26
SET @ItemID3 = NULL
SET @ItemRadius1 = 5000
SET @ItemRadius2 = 5000
SET @ItemRadius3 = NULL
をアイテムIDは、ルックアップフィールドで、半径はメートルの距離です。例えば、クエリは、@ ItemID1のIDを持つアイテムの5000メートル以内のすべてのアセットを返す必要があります。
"ジオ"フィールド(地理タイプ)の間の距離が半径が入力されているものより小さい場合は、現在クエリに参加しています。
SELECT DISTINCT
a.AssetID,
a.Name
FROM Asset a
JOIN Item i1 ON ((a.Geo.STDistance(i1.Geo) < @ItemRadius1) AND i1.TypeID = @ItemID1)
JOIN Item i2 ON ((a.Geo.STDistance(i2.Geo) < @ItemRadius2) AND i2.TypeID = @ItemID2)
JOIN Item i3 ON ((a.Geo.STDistance(i3.Geo) < @ItemRadius3) AND i3.TypeID = @ItemID3)
私の問題は、これがプロシージャとして設定されており、宣言された変数がnullである可能性があることです。それらが私の質問であれば結果は返されません。 @ItemID3 IS NOT NULL AND @ItemRadius3 IS NOT NULL
の場合にのみ条件を実行する方法はありますか?私は宣言されたテーブルに結果を選択しようとしましたが、その宣言されたテーブルでジョインを実行しましたが、結果が正しくフィルタリングされませんでした。任意の提案をいただければ幸いです。私のようにクエリを書くことをお勧め
トライtihs '... は 上のアイテムi3のを登録しよう(@ ItemRadius3がnullであるか、((a.Geo.STDistance(i3.Geo)<@ ItemRadius3)))と(ItemID3がnullまたはi3.TypeIDです@ = @ ItemID3) ' –