选择一个单元格值等于ms sql中参数或所有值的行
这是我的select语句:选择一个单元格值等于ms sql中参数或所有值的行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,这是我的select语句: SELECT * FROM Persons p WHERE p.Name= ISNULL(@Name, p.Name) 它@Name为空它只选择Name不为空的行,而不选择值为空的行 要选择所需的行,必须做些什么?试试这个 SELECT * FROM Persons p WHERE p.Name= coalesce(@Name, p.Name) 试试这个 SELECT * FROM Persons p WHERE p.Name= coalesce(@Name, p
SELECT * FROM Persons p
WHERE p.Name= ISNULL(@Name, p.Name)
它@Name
为空它只选择Name
不为空的行,而不选择值为空的行
要选择所需的行,必须做些什么?试试这个
SELECT * FROM Persons p
WHERE p.Name= coalesce(@Name, p.Name)
试试这个
SELECT * FROM Persons p
WHERE p.Name= coalesce(@Name, p.Name)
如果我理解正确,您需要:
SELECT * FROM Persons p
WHERE (p.Name= ISNULL(@Name, p.Name) OR Name IS NULL)
如果我理解正确,您需要:
SELECT * FROM Persons p
WHERE (p.Name= ISNULL(@Name, p.Name) OR Name IS NULL)
当@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'
作为合并
的最后一个值可能会令人困惑,我将其更改为另一个常量文本。当@Name
为NULL
时,查询变为
SELECT *
FROM Persons P
WHERE p.Name = p.Name
DECLARE @name varchar(290) ='Thomas'
SELECT * FROM
Persons P
WHERE exists(select name intersect select coalesce(@name, name))
而NULL
不等于NULL
,因为它意味着未知值和两个未知值不相等
获取所有数据的一种方法是
SELECT *
FROM Persons P
WHERE COALESCE(p.Name, N'a') = COALESCE(@Name, p.Name, N'a')
因此,当p.Name为NULL
时,有一个默认值可供使用
编辑,因为字符串'NULL'
作为合并的最后一个值可能会让人困惑,我将其更改为另一个常量文字。写为:
DECLARE @name varchar(290) ='Thomas'
SELECT * FROM
Persons P
WHERE exists(select name intersect select coalesce(@name, name))
SELECT * FROM Persons p
WHERE 1 = case when isnull(@Name,'') = '' then 1
when isnull(@Name,'') <> '' and p.Name = @Name then 1
end
从人员中选择*p
其中1=当isnull(@Name,“”)为“”时的大小写,然后1
当isnull(@Name,“)”和p.Name=@Name时,则为1
结束
写为:
SELECT * FROM Persons p
WHERE 1 = case when isnull(@Name,'') = '' then 1
when isnull(@Name,'') <> '' and p.Name = @Name then 1
end
从人员中选择*p
其中1=当isnull(@Name,“”)为“”时的大小写,然后1
当isnull(@Name,“)”和p.Name=@Name时,则为1
结束
似乎您想要显示所有条目,如果@name为null
,如果不是,则只显示与@name
共享相同值的值,这应该可以做到:
SELECT * FROM Persons WHERE @name IS NOT NULL AND name = @name OR @name IS NULL
似乎要显示所有条目,如果@name为null
,如果不是,则仅显示与@name
共享相同值的值,这应该可以做到:
SELECT * FROM Persons WHERE @name IS NOT NULL AND name = @name OR @name IS NULL
当名称参数值为空时,我只得到名称为空的名称,但我只得到名称为空的名称。这与操作系统的查询之间没有功能上的区别。您可以发布一些输入数据和所需的输出,很难理解这是什么!我在原始帖子的评论中发布了一个简单的屏幕,当@Name
为null
时,这就是我想要的,当它不是null
时,我想要Name==@Name@pepela您的屏幕截图令人困惑,因为它显示的一个条目的名称为非空
,而所有其他条目的名称值为空
,这是否意味着如果@name为null
您需要所有条目?或者只有那些有空值的?@drcopyplaste当@Name
为空时,我需要所有条目。这与OPS的查询之间没有功能上的区别。您可以发布一些输入数据和所需的输出,这需要花费很长时间才能理解!我在原始帖子的评论中发布了一个简单的屏幕,当@Name
为null
时,这就是我想要的,当它不是null
时,我想要Name==@Name@pepela您的屏幕截图令人困惑,因为它显示的一个条目的名称为非空
,而所有其他条目的名称值为空
,这是否意味着如果@name为null
您需要所有条目?还是只有那些有空值的?@drcopyplaste当@Name
为空时,我需要所有条目。而且'null'
不等于null
啊,对不起,很好,你清除了它!在你的帖子上读一点快一点;)而且'NULL'
不等于NULL
啊,对不起,很好,你把它清除了!在你的帖子上读一点快一点;)当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用;当@Name有值时,此选项不起作用