选择一个单元格值等于参数的行或ms sql中的所有内容

时间:2014-05-19 10:21:40

标签: sql sql-server sql-server-2008

这是我的选择陈述:

SELECT * FROM Persons p
WHERE p.Name= ISNULL(@Name, p.Name)

@Name为空它只选择Name不为NULL而不是NULL值的行。

选择所需的行需要做些什么?

6 个答案:

答案 0 :(得分:2)

DECLARE @name varchar(290) ='Thomas'

SELECT * FROM 
Persons P
WHERE exists(select name intersect select coalesce(@name, name))

答案 1 :(得分:1)

@NameNULL时,查询变为

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