3

SQLでクエリを実行していますが、現在、ユーザーがテキストボックスに入力したすべての値がnullの場合、検索をクリックすると、テーブル全体が返されます。

SELECT Column Names
FROM TableName
WHERE
        FirstName LIKE '%' + @FirstName + '%'
        OR Surname LIKE '%' + @Surname + '%'
        OR City LIKE '%' + @City + '%'
        OR County LIKE '%' + @County + '%'

しかし、私がやりたいのは、たとえばFirstName検索時に何も入力されていない場合は含めないことです。したがって、誰かが「London」を入力することを決定した場合City、ロンドンを含む結果のみが返されます。同様に、「John」と「」を入力した場合Londonは、ロンドンのジョンに電話したすべての人に返送してもらいたいと思います。

4

6 に答える 6

7
(FirstName LIKE '%' + @FirstName + '%' OR @FirstName IS NULL )
于 2013-01-10T16:58:35.357 に答える
2

他の答えは正しいですが、私はあなたの元のクエリに何かを戻すことで助けになると思いました:

 SELECT Column Names
FROM TableName
WHERE
  ((@FirstName is null and FirstName like '%') or (isnull(FirstName ,0) = @FirstName)) and
  ((@Surname is null and Surname like '%') or (isnull(Surname ,0) = @Surname)) and
  ((@City is null and City like '%') or (isnull(City ,0) = @City)) and
  ((@County is null and County like '%') or (isnull(County,0) = @County))

これをコピーして貼り付けることができるはずです

ジム

于 2013-01-10T17:17:47.520 に答える
2

それで、あなたは@FirstNameそれが価値を持っているかどうかだけを考えたいですか?あなたは変更することによってそれを行うことができます

FirstName LIKE '%' + @FirstName + '%'

これに

(@FirstName = '' OR FirstName LIKE '%' + @FirstName + '%')

またはもちろん、@ FirstNameが空の文字列ではなくnullとして入力される場合は、次のようになります。

(@FirstName IS NULL OR FirstName LIKE '%' + @FirstName + '%')
于 2013-01-10T16:57:51.940 に答える
0

これはもっと面倒ですが、データセットとインデックスのサイズによっては、このルートを使用することでパフォーマンスをいくらか向上させることができます。

Declare @FirstName Nvarchar(10),
        @SurName Nvarchar(10),
        @City Nvarchar(10),
        @County Nvarchar(10),
        @SQL Nvarchar(Max),
        @OrCriteria Nvarchar(Max) = ''

Set     @SQL = 'Select  Column Names
                From    TableName '

If      @FirstName Is Not Null
Begin
        Set     @OrCriteria = @OrCriteria + 'FirstName Like ''%''' + @FirstName + '''%'' Or '
End         

If      @Surname Is Not Null
Begin
        Set     @OrCriteria = @OrCriteria + 'Surname Like ''%''' + @Surname + '''%'' Or '
End     

If      @City Is Not Null
Begin
        Set     @OrCriteria = @OrCriteria + 'City Like ''%''' + @City + '''%'' Or '
End     

If      @County Is Not Null
Begin
        Set     @OrCriteria = @OrCriteria + 'County Like ''%''' + @County + '''%'' Or '
End         

If      @OrCriteria <> ''
Begin
        Set     @SQL = @SQL + 'Where (' + Left(@OrCriteria,Len(@OrCriteria)-4) + ')'
End

Exec    sp_executeSQL @SQL
于 2013-01-10T17:11:38.030 に答える
0
declare @sql as varchar(300)
, @FirstName as varchar(50)
, @Surname as varchar(50)
, @City as varchar(50)
, @County as varchar(50)

set  @FirstName = 'myname'
set  @Surname = 'mylastname'
set  @City = null
set  @County = 'county'

set @sql= 'SELECT Column_Names
FROM TableName ' +    
 case when rtrim(ltrim(isnull(@FirstName,'') + isnull(@Surname,'') + isnull(@City,'') + isnull(@County,''))) = '' then '' else 'where ' end
 + coalesce('FirstName LIKE ''%' + nullif(@FirstName,'')+ '%'' or ', '') +
        + coalesce('Surname LIKE ''%' + nullif(@Surname,'')+ '%'' or ', '') +
        + coalesce('City LIKE ''%' + nullif(@City,'')+ '%'' or ', '') +
        + coalesce('County LIKE ''%' + nullif(@County,'')+ '%''', '')

    select @sql

の内容@sql

SELECT Column_Names  FROM TableName where FirstName LIKE '%myname%' or Surname LIKE %mylastname%' or County LIKE '%county%'

次に、作成した動的文字列を使用するには、次のことを行う必要があります。Exec @Sql

于 2013-01-10T17:19:53.880 に答える
0

SQL ServerにはISNULL()が存在します

それから

SELECT Column Names
FROM TableName
WHERE
        FirstName LIKE '%' + ISNULL((@FirstName, '') + '%'
        OR Surname LIKE '%' + ISNULL((@Surname, '') + '%'
        OR City LIKE '%' + ISNULL((@City, '') + '%'
        OR County LIKE '%' + ISNULL((@County, '') + '%'
于 2013-01-11T18:20:41.897 に答える