我有一个搜索我的会员表的选择程序。 会员表有:
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 = ''
但这不起作用,因为我得到插入删除日期的行。
我做错了什么?
非常感谢!!
答案 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