2017-06-30 3 views
0

私は単精度ストアを選択できますが、複数のストアを選択することや単数ストアを選択することができます。私はこれがOR声明によって簡単に達成できることを知っている、私はそれを行う方法を忘れてしまった。 IN複数のストアを選択しているSQL

your_column( '1'、 '2'、 '3'、 '4')

数字はのIDSになります

WHERE 
    ISSUE_TYPE = 'T1' 
AND 
    TXT_03 = @STORE 
AND 
    ISSUE_STS IN ('C', 'N', 'I', 'D') 
AND 
    ENT_STAMP BETWEEN @DtFrom AND @DtTo 
+1

だから、あなたがしようとしているものをサンプルデータ、ストアドプロシージャを提供? –

+0

ああ男、あなたのコードを投稿する必要があります – PawelCz

+0

"独占店"とはなんですか?どの店ですか?データベースのように食料品や店舗に保管しますか?なぜ、1つまたは複数の食料品を選ぶのが問題になるのでしょうか? IDのリストを渡して複数の値を選択した場合、値は*単一の*値を渡すだけです –

答えて

0

は、多分あなたは、このようなのINステートメントを使用することができますあなたの店はおそらく?

+0

"All"または "ABC"を選択する必要があります –

+1

@TitoPatersonまず適切な質問を書く必要があります。すべてまたは1つが複数でも1つでもありません。すべては実際には「この列を無視する」という意味です。 *この場合はストアドプロシージャを使用しないでください。ビューを作成し、それぞれのケースごとに異なるクエリを使用します。または、すべての結果が必要な場合は、特定のストアを選択してビューに対してクエリを実行する単一のストアドプロシージャ。 *なぜ*最初にストアドプロシージャが必要ですか? –

0

私はあなたが以下行うことができます言う:

IF (@STORE IS NOT NULL) 
BEGIN 
    -- ... 
    WHERE 
     ISSUE_TYPE = 'T1' 
    AND 
     TXT_03 = @STORE 
    AND 
     ISSUE_STS IN ('C', 'N', 'I', 'D') 
    AND 
     ENT_STAMP BETWEEN @DtFrom AND @DtTo 
END 
ELSE 
BEGIN 
    -- ... 
    WHERE 
     ISSUE_TYPE = 'T1' 
    AND 
     ISSUE_STS IN ('C', 'N', 'I', 'D') 
    AND 
     ENT_STAMP BETWEEN @DtFrom AND @DtTo 
END 

あなたはすべての店舗を返すようにしたい場合は、単にnullを渡します。

EDIT、第二の選択肢(デプロイする前にテスト):

-- ... 
    WHERE 
     ISSUE_TYPE = 'T1' 
    AND 
     ISNULL(TXT_03,'') = CASE WHEN @STORE IS NULL THEN ISNULL(TXT_03,'') 
           ELSE @STORE 
           END 
    AND 
     ISSUE_STS IN ('C', 'N', 'I', 'D') 
    AND 
     ENT_STAMP BETWEEN @DtFrom AND @DtTo 
+0

これは不適切な実行計画を使用する可能性が50%です。実行計画が作成され、ストアドプロシージャが呼び出される*最初の時間* –

+0

これはありがとう私はこれを行ってくれます –

+0

@TitoPaterson場合は、次の質問は "なぜこれが遅いです"。 *なぜ*この場合にストアドプロシージャを使用しようとしていますか?なぜビューや関数ではないのですか?なぜLINQクエリではないのですか? –

関連する問題