强制 COALESE(NULL,NULL) 返回 NULL

Nas*_*ici 2 sql t-sql sql-server

在 SQL SERVER 中考虑以下事实:Col1 和 Col2 包含数字和 NULL 值

SELECT 
COALESCE(Col1,Col2) 
Run Code Online (Sandbox Code Playgroud)

返回错误:“COALESCE 的至少一个参数必须是非 NULL 常量的表达式。” 考虑到 Col1 和 Col2 为 NULL,我想在这种情况下强制它返回 NULL 值。

解决方法对我来说似乎不优雅/低效:

SELECT
NULLIF(COALESCE(Col1 ,Col2 ,''),'') 
Run Code Online (Sandbox Code Playgroud)

请注意,Col1 和 Col2 是数字字段,不能将 '' 作为值。

还有其他建议吗?

感谢您的帮助

Gor*_*off 5

这段代码的工作原理:

SELECT COALESCE(Col1, Col2) 
FROM . . .   -- references here that define COL1 and COL2
Run Code Online (Sandbox Code Playgroud)

如果两列都是NULL,它将返回NULL(在您的情况下输入为整数)。

唯一一次出现您提到的错误是当列是明确的 NULL时。甚至计算似乎也绕过了这个:

select coalesce(null + 3, null)
--> NULL rather than an error
Run Code Online (Sandbox Code Playgroud)

以下甚至返回NULL而不是错误:

declare @col1 int;
declare @col2 int;

select coalesce(@col1, @col2);
Run Code Online (Sandbox Code Playgroud)

是一个 db<>fiddle。