Sql server 选择具有空值单元格的行

Sql server 选择具有空值单元格的行,sql-server,null,row,Sql Server,Null,Row,我有一张这样的桌子 Bookid StuId borrowdate ReturnedDate 2 10 2013-05-01 2013-05-31 2 10 2013-06-01 NULL 空值表示不返回该书。我想选择第二行,并在sql server上尝试此操作 CREATE PROC validate( @stuid varchar(50), @bookid int,

我有一张这样的桌子

Bookid   StuId        borrowdate    ReturnedDate
2        10           2013-05-01    2013-05-31
2        10           2013-06-01    NULL
空值表示不返回该书。我想选择第二行,并在sql server上尝试此操作

CREATE PROC validate(
    @stuid varchar(50), 
    @bookid int,
    @returndate date)
AS    
SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ReturnedDate = @returndate
    go

但结果是一个空表。任何人都可以帮助我,谢谢

在SQL中,无法测试某个值是否等于NULL-这不是有效的测试

因此,如果您想查找尚未归还的书籍,可以尝试:

SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ReturnedDate IS NULL;
或者,如果需要使用可能为null的参数,可以执行以下操作:

SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ISNULL(ReturnedDate, '2008-11-11') = ISNULL (@returndate, '2008-11-11');
请注意,第一个中的
为NULL
与第二个中的
为NULL(
不同

如果字段为NULL,则第一个
为NULL
返回true

第二个表示“如果字段为空,则使用此值”


日期是标准的SQL日期格式,这取决于选择一个没有人可以归还图书的神奇日期(例如,图书馆创建前50年)。

和ReturnedDate为null
,任何基本的SQL文档(或谷歌搜索)都会告诉你。