2016-12-01 6 views
0

私の質問は、スマートな方法でクエリ文字列を改善する方法ですか?T-SQL動的クエリ

DBからパラメータクエリデータを使用する場合は、パラメータがnullの場合は削除されます。

私のクエリ文字列は、以下のお気に入り:

ALTER procedure [dbo].[spQueryDataFromCPREFROM] 
@CompanyName varchar(50), 
@TestDDL varchar(20), 
@TesterName varchar(50), 
@DatepickerForTestDate datetime, 
@ApplyDate datetime, 
@TestTypeDDL varchar(1), 
@QueryString nvarchar(max) 
as 
begin 
    if @CompanyName is not null 
     and @TestDDL is not null 
     and @TesterName is not null 
     and @DatepickerForTestDate is not null 
     and @ApplyDate is not null 
     and @TestTypeDDL is not null 
     and @QueryString is not null 
     begin 
      select @QueryString = 'select * from [dbo].[CPREFROM] as CF where CF.[UNIT_TID] ='+ @CompanyName 
            +'and CF.[ELIGIBLE_RATING] ='+ @TestDDL 
            +'and CF.[Name] =' + @TesterName 
            +'and CF.[CHECKDATE] ='+ @DatepickerForTestDate 
            +'and CF.[APPLYDATE] =' + @ApplyDate 
            +'and CF.[A_S] =' + @TestTypeDDL 
     end 
    else if @CompanyName is null 
      and @TestDDL is not null 
      and @TesterName is not null 
      and @DatepickerForTestDate is not null 
      and @ApplyDate is not null 
      and @TestTypeDDL is not null 
      and @QueryString is not null 
      begin 
       select @QueryString = 'select * from [dbo].[CPREFROM] as CF where CF.[ELIGIBLE_RATING] ='+ @TestDDL 
            +'and CF.[Name] =' + @TesterName 
            +'and CF.[CHECKDATE] ='+ @DatepickerForTestDate 
            +'and CF.[APPLYDATE] =' + @ApplyDate 
            +'and CF.[A_S] =' + @TestTypeDDL 
      end 
    ... 

答えて

0

あなたのための助けの下にできますか?たとえば :

"CF. [UNIT_TID] = CF [UNIT_TID]。" 同じ1

 select @QueryString = 'select * from [dbo].[CPREFROM] as CF where CF.[UNIT_TID] ='+ ISNULL(@CompanyName,'CF.[UNIT_TID]') 
           +'and CF.[ELIGIBLE_RATING] ='+ ISNULL(@TestDDL,'CF.[ELIGIBLE_RATING]') 
           +'and CF.[Name] =' + ISNULL(@TesterName,'CF.[Name]') 
           +'and CF.[CHECKDATE] ='+ ISNULL(@DatepickerForTestDate,'CF.[CHECKDATE]') 
           +'and CF.[APPLYDATE] =' + ISNULL(@ApplyDate,'CF.[APPLYDATE]') 
           +'and CF.[A_S] =' + ISNULL(@TestTypeDDL,'CF.[A_S]') 

= 1として、しかし、可能な値がnullの場合は、値 理由を処理するためにISNULLを使用する必要がありますNULL = NULLの結果は真ではありません。

サンプル:

+'and ISNULL(CF.[Name],'''') =' + ISNULL(@TesterName,'ISNULL(CF.[Name],'''')') 
+0

はい、あなたの答えは素晴らしいのおかげです。 –