使用COALESCE没有返回任何行

时间:2011-08-25 19:01:36

标签: sql sql-server-2008

我多次使用过COALESCE,但我想我从未遇到过这种特殊情况。假设@ param1只有一行。

select @test = COALESCE (column1, 'default') FROM Table1 WHERE column3 = @param1

在这种情况下,如果column1的值为null,则在sql语句实际返回行时选择“default”。如果@ param1没有匹配的记录怎么办。

让我们说我希望@test总是有一个默认值。以下是正确的还是有另一种方式?

select @test = COALESCE( (select column1 FROM Table1 WHERE column3 = @param1), 'default').

我推测,select @test = COALESCE (column1, 'default') FROM Table1 WHERE column3 = @param1,即使没有返回一行,也会包含'default'。不。

我想我之后也可以检查@test是否为NULL并同时指定默认值。

2 个答案:

答案 0 :(得分:10)

您已经有效地提到了答案...在SELECT之后/之外使用COALESCE,否则您实际上从未分配过一个值(与分配NULL值不同)......

SELECT @test = NULL
SELECT @test = column1 FROM Table1 WHERE column3 = @param1
SELECT @test = COALESCE(@test, 'default')

或者只是......

SELECT @test = COALESCE((SELECT column1 FROM Table1 WHERE column3 = @param1), 'default')

答案 1 :(得分:1)

你也可以在声明时给变量赋予默认值。如果查询没有返回任何行,则不会进行任何分配。

DECLARE @test VARCHAR(10) = 'default'

SELECT  @test = COALESCE(column1, @test) /*Might not need COALESCE 
                                           if column1 is not nullable*/
FROM    Table1
WHERE   column3 = @param1 

SELECT  @test