2017-11-09 7 views
0

SQLスクリプトの先頭に変数を設定してから、その変数を他の多くの場所で呼び出して単純なものにします。変数にデータがある場合、SQLにwhere句に条件を追加します

私は条件付きのwhere節を追加してANDステートメントを追加したいが、@test_patientフィールドにデータがある場合のみ追加したい。

declare @from_date date 
set @from_date = '2017-01-01 00:00:01' 

declare @to_date date 
set @to_date = '2017-12-31 00:00:01' 

declare @test_patients NVARCHAR(MAX) 
set @test_patients = ('123','234') 

select * from table 
where 
    date between @from_date and @to_date 
    AND other things 
    AND other things... 

...そして、ここでは、私は助けが必要な部分です...

IF @test_patients IS NOT NULL 
     Add this-> and p.PatientId in @test_patients    
    ELSE nothing... move along... 

私は特に、私はそれがしたいいくつかのテスト患者に入れない限り、基本的には、コードは、すべての患者をつかむだろう見つける。私の変数にテスト患者を投入しないと、特定の患者を探すことは望ましくありません。あなたがこれを行うことができます

+0

私は 'ダイナミックSQL' – Sami

+0

を提案しますI NVARCHAR(MAX)が配列を作成する正しい方法であるかもわかりません。誰でも知っていますか? – Frantumn

答えて

0

を行うことができますあなたはORを使用することができます。

select * from table 
where 
    date between @from_date and @to_date 
    AND other things 
    AND other things... 
    AND (@test_patients IS NULL OR p.PatientID = @test_patients) 
+0

これは一度に1人の患者に有効です。私は、患者の配列が必要な場合は、varcharの代わりにテーブル変数を使用する必要があることを知りました。これは意味があります...しかし、実際にはwhere節が複雑になりました。私はたくさんの方法を試して、それを働かせることができませんでした。 – Frantumn

+0

@Frantumn患者リスト(123,124,125,126、...)がある場合は、 '='を 'IN'で変更できます。 – Eric

0

WHERE p.PatientId in @test_patients OR @test_patients IS NULL 
1

をあなたがこの方法で

select * from table 
where 
    date between @from_date and @to_date 
    AND other things 
    AND other things... 
    AND (@test_patients IS NULL OR (@test_patients IS NOT NULL AND p.PatientId in @test_patients )) 
    AND (@test_patients IS NULL OR (@test_patients IS NOT NULL AND otherthing.... )) 
関連する問題