TBV函数中检查输入参数非空非空白的最优方法
简化SQL参数非空非空白的检查写法
嘿,作为SQL新手能想到用COALESCE和NULLIF来处理参数校验已经很不错啦!你原来的写法确实有点冗余,咱们来优化成更优雅高效的版本。
最简洁通用的优化方案
针对检查@Id不为NULL且不为空白字符(全空格、空字符串)的需求,只需要用NULLIF配合IS NOT NULL就能一步到位,再结合你原本的Id = @Id条件,最终的WHERE子句可以写成:
SELECT * FROM [FN_Table]() WHERE NULLIF(@Id, '') IS NOT NULL AND Id = @Id
为什么这个写法更好?
- 逻辑清晰:
NULLIF(@Id, '')会把空字符串或者全空格的@Id转换为NULL,再用IS NOT NULL就同时排除了@Id本身为NULL和@Id是空白的两种情况,比你原来的多重判断简洁太多。 - 性能更优:减少了重复的函数调用(你原来同时用了
COALESCE和NULLIF),内置的NULLIF函数执行开销极低,不会影响查询效率。
特殊场景补充
如果@Id可能包含制表符、换行符这类非空格的空白字符,SQL Server 2017及以上版本可以用TRIM()函数来处理所有空白:
SELECT * FROM [FN_Table]() WHERE NULLIF(TRIM(@Id), '') IS NOT NULL AND Id = @Id
要是你用的是更早的SQL Server版本,可以用LTRIM(RTRIM())组合来替代TRIM():
SELECT * FROM [FN_Table]() WHERE NULLIF(LTRIM(RTRIM(@Id)), '') IS NOT NULL AND Id = @Id
额外小提示
其实如果@Id是NULL或者空白的话,Id = @Id本身是不会匹配任何行的(因为NULL = NULL在SQL里是未知,不会返回真),但加上NULLIF(@Id, '') IS NOT NULL的校验能让逻辑更明确,也方便后续维护的人一眼看懂你的意图。
内容的提问来源于stack exchange,提问作者So_oP
相关产品推荐
相关产品推荐

