如何从SQL查询返回默认值

Mar*_*acz 41 sql sql-server sql-server-2008-r2

如果查询没有返回任何行,是否有任何简单的方法可以返回单个标量或默认值?

此刻我有类似这样的代码示例:

IF (EXISTS (SELECT * FROM Users WHERE Id = @UserId))  
    SELECT Name FROM Users WHERE Id = @UserId  
ELSE
    --default value
    SELECT 'John Doe'
Run Code Online (Sandbox Code Playgroud)

如何在不使用IF-ELSE的情况下以更好的方式做到这一点?

Mar*_*ith 68

假设名称不可为空并且该名称是Id唯一的,因此最多可以匹配一行.

 SELECT 
    ISNULL(MAX(Name),'John Doe')
 FROM 
    Users 
 WHERE 
    Id = @UserId  
Run Code Online (Sandbox Code Playgroud)

  • @ChrisGessler - 是的.没有"GROUP BY"或"HAVING"的`MAX`总是返回一行. (3认同)

Mat*_*tzi 23

尝试ISNULLCOALESCE:

SELECT ISNULL((SELECT TOP 1 Name FROM Users WHERE Id = @UserId), 'John Doe')
Run Code Online (Sandbox Code Playgroud)

如果不存在具有此id的用户,则内部选择将不返回任何内容,isnull将解决此情况.

  • 不要使用`COALESCE`作为[这将评估子查询两次](http://connect.microsoft.com/SQLServer/feedback/details/336002/unnecessarily-bad-performance-for-coalesce-subquery) (7认同)

kin*_*neo 5

Try this 
`SELECT IFNULL(Name,'John Doe') FROM Users WHERE Id = @UserId)`
Run Code Online (Sandbox Code Playgroud)