2014-03-26 4 views
0

내 구성원 테이블을 검색하는 선택 절차가 있습니다. 회원국 테이블이 있습니다SQL : null 날짜 검색

ID – Name – Deleted 
1 – Marcus – NULL 
2 – Regina – 2014-03-26 09:33:00.000 

존재 : 이드 PK의 INT없고 NULL이 포함 된 VARCHAR (250) 및 삭제 된 날짜 시간 NULL의 이름을 지정합니다. 여기

내 절차입니다 :

삭제 된 날짜가없는 회원을 검색하기 위해
CREATE PROCEDURE dbo.SELECT_MEMBERS 

    @ID int = NULL, 
    @Name varchar(250)= NULL, 
    @Deleted datetime =NULL 

AS 
BEGIN 
IF @Deleted = '' 
     BEGIN 
      SET @Deleted = NULL 
     END  
     ELSE 
     BEGIN 
      SET @Deleted = @Deleted 
     END 

SET NOCOUNT ON; 

    SELECT ID, Name, Deleted 
    FROM dbo.Members WHERE 
     (@ID IS NULL OR @ID = ID) 
    AND (@Name IS NULL OR @Name = Name) 
    AND (@Deleted IS NULL OR @Deleted = Deleted) 


END 
GO 

내가 할 (그들은 삭제 된 날짜가 있다면 그들은 더 활동적인 회원이 없음을 의미) :

EXEC dbo.SELECT_MEMBERS @Deleted = '' 

삭제 된 날짜가 삽입 된 행을 가져 오면 작동하지 않습니다.

내가 뭘 잘못하고 있니?

감사합니다.

+1

사용 ISNULL 기능 :

난 당신이 뭔가를 원한다고 생각 – hgulyan

답변

1
CREATE PROCEDURE dbo.SELECT_MEMBERS 

    @ID int = NULL, 
    @Name varchar(250)= NULL, 
    @Deleted datetime =NULL 

AS 
BEGIN 

SET NOCOUNT ON; 

    SELECT ID, Name, Deleted 
    FROM dbo.Members 
    WHERE ID = ID 
    AND ISNULL(@Name, '') = ISNULL(Name, '') 
    AND ISNULL(@Deleted, '') = ISNULL(Deleted, '') 


END 
GO 
0

당신이 @Deleted 날짜 @ID@Name에 대한 NULL 값에서 다르게 행동하기 위해 빈/NULL 값을 원하는 것 같다 : 당신이 값이 NULL 경우에만 사실로 @Deleted의 실제 비교를합니다.

CREATE PROCEDURE dbo.SELECT_MEMBERS 
    @ID int = NULL, 
    @Name varchar(250)= NULL, 
    @Deleted datetime = NULL 
AS 
BEGIN 
    SELECT ID, Name, Deleted 
    FROM dbo.Members 
    WHERE (@ID IS NULL OR @ID = ID) AND 
     (@Name IS NULL OR @Name = Name) AND 
     ((@Deleted IS NULL OR @Deleted = Deleted or @Deleted = '' and Deleted is null) 
END;