这是我的选择陈述:
SELECT * FROM Persons p
WHERE p.Name= ISNULL(@Name, p.Name)
它@Name
为空它只选择Name
不为NULL而不是NULL
值的行。
选择所需的行需要做些什么?
答案 0 :(得分:2)
DECLARE @name varchar(290) ='Thomas'
SELECT * FROM
Persons P
WHERE exists(select name intersect select coalesce(@name, name))
答案 1 :(得分:1)
当@Name
为NULL
时,查询变为
SELECT *
FROM Persons P
WHERE p.Name = p.Name
且NULL
不等于NULL
,因为它表示未知值且两个未知值不相等。
获取所有数据的方法是
SELECT *
FROM Persons P
WHERE COALESCE(p.Name, N'a') = COALESCE(@Name, p.Name, N'a')
因此当p.Name为NULL
时,有一个默认值可供使用。
编辑作为字符串'NULL'
,因为COALESCE
的最后一个值可能令人困惑我将其更改为另一个常量字面值。
答案 2 :(得分:1)
好像你想要显示所有条目,如果@name is null
,如果不是,则只显示与@name
共享相同值的值,这应该这样做:
SELECT * FROM Persons WHERE @name IS NOT NULL AND name = @name OR @name IS NULL
答案 3 :(得分:0)
试试这个!
SELECT * FROM Persons p
WHERE p.Name= coalesce(@Name, p.Name)
答案 4 :(得分:0)
如果我理解正确,你需要这个:
SELECT * FROM Persons p
WHERE (p.Name= ISNULL(@Name, p.Name) OR Name IS NULL)
答案 5 :(得分:0)
写为:
SELECT * FROM Persons p
WHERE 1 = case when isnull(@Name,'') = '' then 1
when isnull(@Name,'') <> '' and p.Name = @Name then 1
end