2

一連の結果を返すストアド プロシージャを作成しようとしています。

私のページには、3 つのチェックボックスと検索ボックスがあります。

次に、ストアドプロシージャには次のものがあります。

CREATE Procedure [dbo].[sp_Search]
   @Bool1 bit = NULL, 
   @Bool2 bit = NULL,
   @Bool3 bit = NULL,
   @SearchTerm nvarchar(30)
As
Begin
   Select 
        [CompanyID],
        [CompanyName],
        [Label],
        [Bool1],[Bool2],[Bool3]     
    From [Contract Companies]
    WHERE (CompanyName LIKE @SearchTerm OR [Label] LIKE @SearchTerm) AND
    if(@Bool1 IS NOT NULL)
    [Bool1] = 'True'
    end 

if(@Bool2 IS NOT NULL)
 AND    [Bool2] = 'True'
    end 

if(@Bool3 IS NOT NULL)
AND [Bool3] = 'True'
    end 

そのようなもので、これらの 3 つのブール値は常に true ではなく、チェックボックスがオンになっているときだけです。

どうすればそれを達成できますか?

前もって感謝します、 ラツィアーレ

4

2 に答える 2

2

次のようなことを試してみてください:

create procedure [dbo].[sp_Search]
   @Bool1 bit = null, 
   @Bool2 bit = null,
   @Bool3 bit = null,
   @SearchTerm nvarchar(30)
as
begin
   select 
        CompanyID,
        CompanyName,
        Label,
        Bool1,
        Bool2,
        Bool3    
    from Contract Companies
    where (CompanyName like @SearchTerm or Label like @SearchTerm)
        and (Bool1 = @Bool1 or @Bool1 is null)
        and (Bool2 = @Bool2 or @Bool2 is null)
        and (Bool3 = @Bool3 or @Bool3 is null)
end

これにより、存在する場合は各ブール値に一致するレコードが取得され、それ以外の場合はすべてのレコードが取得されます。

これは動的に値をチェックする最良の方法ではないかもしれないことに注意してください。その記事で説明されている代替手段があります。

于 2013-02-07T22:14:41.550 に答える
0

CASE式のオプション

CREATE Procedure [dbo].[sp_Search]
   @Bool1 bit = NULL, 
   @Bool2 bit = NULL,
   @Bool3 bit = NULL,
   @SearchTerm nvarchar(30)
As
Begin
   Select 
        [CompanyID],
        [CompanyName],
        [Label],
        [Bool1],[Bool2],[Bool3]     
    From [Contract Companies]
    WHERE (CompanyName LIKE @SearchTerm OR [Label] LIKE @SearchTerm) AND
          [Bool1] = CASE WHEN @Bool1 IS NOT NULL THEN 'True' ELSE [Bool1] END AND
          [Bool2] = CASE WHEN @Bool2 IS NOT NULL THEN 'True' ELSE [Bool2] END AND
          [Bool3] = CASE WHEN @Bool3 IS NOT NULL THEN 'True' ELSE [Bool3] END 
于 2013-02-07T22:31:57.107 に答える