SQL SELECT语句的THEN子句中能否调用函数?
在CASE表达式的THEN子句中调用函数是完全可行的!
当然可以!在SQL的CASE表达式里,不管是THEN分支还是ELSE分支,都完全支持调用函数——只要这个函数在你的数据库环境中是合法定义且可访问的就行。
你给出的示例代码是完全有效的:
CASE WHEN Title = 'Chief Operating Officer' THEN [GetManager](EmployeeNumber) WHEN Title = 'Partner' THEN NULL ELSE [GetManager](EmployeeNumber) END as ManagerName,
这里的[GetManager]作为标量函数,用来根据员工编号返回对应的经理名称,在THEN和ELSE里调用它完全符合SQL语法规范。
不过顺便提个小优化:你这段逻辑里,Chief Operating Officer和其他非Partner的情况都调用了同一个函数,其实可以简化成下面的写法,逻辑完全一致但更简洁:
CASE WHEN Title = 'Partner' THEN NULL ELSE [GetManager](EmployeeNumber) END as ManagerName,
另外还有几个小细节需要注意:
- 确保函数的返回值类型和CASE表达式其他分支的返回值类型兼容,比如如果THEN返回字符串,那其他分支最好也返回字符串或者可隐式转换的类型,避免类型错误
- 如果函数是涉及复杂查询的非确定性函数,要留意它对整体SQL语句性能的影响,必要时可以考虑优化函数逻辑或者调整查询方式
- 确认你有调用该函数的权限,避免出现权限相关的报错
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

