2009-08-12 5 views
1

찾기 I 다음 검색 SQL 쿼리를 다음 FIRSTNAME 또는 성이 빈 문자열 ''는 잘못된 값을 반환로를 통해 보낼 때 내가 전달하는 경우SQL LIKE 쿼리

ALTER PROCEDURE [EmployeeSearch] 
@PayrollNumber varchar(50) = null, 
@isInternal  bit = null, 
@Firstname  varchar(50) = null, 
@Surname  varchar(50) = null 
AS 
SET NOCOUNT ON; 
Select EmployeeSearchView.* 
From EmployeeSearchView 
Where 
EmployeeSearchView.isInternal = @isInternal 
AND 
(EmployeeSearchView.PayrollNumber LIKE '%' + @PayrollNumber + '%' 
OR EmployeeSearchView.Firstname LIKE '%' + @Firstname + '%' 
OR EmployeeSearchView.Surname LIKE '%' + @Surname + '%' 

유일한 문제는 ...입니다 null 값이 작동합니다. 어떻게이 쿼리를 수정할 수 있습니까?

감사합니다.

답변

1

다른 절을 추가하여 빈 문자열을 확인할 수 있습니까?

ALTER PROCEDURE [EmployeeSearch] 
@PayrollNumber varchar(50) = null, 
@isInternal    bit = null, 
@Firstname    varchar(50) = null, 
@Surname    varchar(50) = null 
AS 
SET NOCOUNT ON; 
Select EmployeeSearchView.* 
From EmployeeSearchView 
Where 
EmployeeSearchView.isInternal = @isInternal 
AND 
(EmployeeSearchView.PayrollNumber LIKE '%' + @PayrollNumber + ' %' 
OR (@Firstname <> '' AND EmployeeSearchView.Firstname LIKE '%' + @Firstname + ' %') 
OR (@Surname <> '' AND EmployeeSearchView.Surname LIKE '%' + @Surname + ' %') 
0
ALTER PROCEDURE [EmployeeSearch] 
@PayrollNumber varchar(50) = null, 
@isInternal    bit = null, 
@Firstname    varchar(50) = null, 
@Surname    varchar(50) = null 
AS 
SET NOCOUNT ON; 

IF (IsNull(@FirstName, '') = '') 
    SET @FirstName = '%' 
ELSE 
    SET @FirstName = '%' + @FirstName + '%'; 
END 

IF (IsNull(@Surname, '') = '') 
    SET @Surname = '%' 
ELSE 
    SET @Surname = '%' + @Surname + '%'; 
END 

Select EmployeeSearchView.* 
From EmployeeSearchView 
Where 
EmployeeSearchView.isInternal = @isInternal 
AND 
(EmployeeSearchView.PayrollNumber LIKE '%' + @PayrollNumber + '%' 
AND EmployeeSearchView.Firstname LIKE @Firstname 
AND EmployeeSearchView.Surname LIKE @Surname