使用COALESCE没有返回任何行

Ale*_*x J 6 sql sql-server-2008

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

select @test = COALESCE (column1, 'default') FROM Table1 WHERE column3 = @param1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果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并分配默认值.

Mat*_*lie 10

你已经有效地提到了答案...... COALESCE在SELECT之后/之外使用,否则你永远不会实际分配一个值(这与分配NULL值不同)......

SELECT @test = NULL
SELECT @test = column1 FROM Table1 WHERE column3 = @param1
SELECT @test = COALESCE(@test, 'default')
Run Code Online (Sandbox Code Playgroud)

或者只是......

SELECT @test = COALESCE((SELECT column1 FROM Table1 WHERE column3 = @param1), 'default')
Run Code Online (Sandbox Code Playgroud)