私は、アドレスを選択するストアド・プロシージャを作成しています。多くの選択パラメータがありますが、問題の原因は状態の選択です。 国は必須で、1つ以上の国名を使用できます。 国がUSAの場合、状態はNULLまたは1対多の状態コードになります。 は、私はテーブル値関数(ParmTable_String)を持っているので、私は、パラメータリストに参加することができますし、状態コードがある場合、これは動作します:SQLのパラメータ・リストまたはnullへの結合
DECLARE @Country AS varchar(MAX);
DECLARE @State AS varchar(256);
SET @Country = 'USA';
SET @State = 'ME, VT';
SELECT *
FROM Customer
JOIN ParmTable_String(@Country, ',') AS CT
ON Country = CT.str
JOIN ParmTable_String(@State, ',') AS ST
ON State = ST.str
しかし@State = null
場合、私はNULLの結果セットを取得します。これを左結合してwhere句を追加すると、単一の状態コードまたはnullでは動作しますが、リストでは機能しません。
WHERE State = @State OR @State IS NULL
誰でもこれに対応していますか?
OK、私は解決策を持っているが、私は、これは私には少し原油だとして、より良い方法があることを考えている:
DECLARE @Country AS varchar(MAX);
DECLARE @State AS varchar(256);
SET @Country = 'USA';
SET @State = 'ME, VT';
SELECT *
FROM Customer
JOIN ParmTable_String(@Country, ',') AS CT
ON Country = CT.str
WHERE (State IN
(SELECT str from lntw.ParmTable_String(@State, ',')) OR @State IS NULL)
ansi_nullsをオフに設定しましたか? –
はい、テーブル値関数から返された文字列にNULLIFを試しましたが、結果は返されませんでした。 – GBrookman
ParmTable_Stringのコードと期待される結果の例を掲載してください。私は良い解決策を持っていると思うが、それを知るのは難しい... –