SQL:搜索空日期

时间:2014-03-26 10:21:08

标签: sql sql-server datetime select null

我有一个搜索我的会员表的选择程序。 会员表有:

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

存在:ID a PK int no NULL,命名varchar(250)并删除datetime 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 = ''

但这不起作用,因为我得到插入删除日期的行。

我做错了什么?

非常感谢!!

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

您希望NULL日期的空/ @Deleted值的行为与NULL@ID的{​​{1}}值的行为不同:您想要的@Name的实际比较仅在值为@Deleted时才为真。

我想你想要这样的东西:

NULL