SQL Server变量非空判断两种IF写法性能对比及选型咨询
SQL Server 两种非空判断写法对比
逻辑正确性差异
你给出的两种写法逻辑完全不同,第一种写法无法实现「判断变量非NULL且非空字符串」的常规需求:
- 第一种写法使用
OR逻辑:只要变量不为NULL,无论取值是不是空字符串,条件都会返回真。例如当@MyVal = ''时,@MyVal IS NOT NULL结果为真,OR运算后整个条件直接成立,会错误进入CRUD执行分支,不符合非空判断要求。 - 第二种写法使用
AND逻辑:要求变量同时满足「不是NULL」和「不等于空字符串」两个条件才会进入分支,符合常规的非空判断需求。
性能对比(修正逻辑后)
如果将第一种写法的OR修正为AND(变成IF (@MyVal IS NOT NULL) AND (LEN(@MyVal) > 0)),再和第二种写法对比,二者性能完全一致。
这两个都是SQL Server中最基础的标量判断运算,查询优化器会将其优化为完全相同的底层执行逻辑,不会产生任何性能差异,不需要为了性能在二者之间做选择。
写法选择建议
- 常规非空判断(仅排除NULL和空字符串,全空格视为有效值):优先选第二种
IF @MyVal IS NOT NULL AND @MyVal <> '',语义更直观,代码更简洁。 - 需要同时排除全空格字符串的场景:可以选择修正后的第一种写法
IF (@MyVal IS NOT NULL) AND (LEN(@MyVal) > 0),SQL Server中LEN()函数会自动忽略字符串末尾的空格,LEN(' ')返回值为0,可以命中全空格的判断场景。
内容的提问来源于stack exchange,提问作者Bhushan
相关产品推荐
相关产品推荐

