如何编写T-SQL存储过程判断查询结果集所有行指定两列是否全为NULL
T-SQL存储过程实现指定列全空校验
直接给出最优实现方案,核心用EXISTS做判断,无需扫描全量匹配行,性能更高:
CREATE PROCEDURE CheckProductColumnsAllNull @ProductID INT, @IsAllNull BIT OUTPUT -- 输出参数:1对应true,0对应false AS BEGIN SET NOCOUNT ON; -- 存在任意一行的ProductType或ProductDate非空,返回false IF EXISTS ( SELECT 1 FROM Products WHERE productID = @ProductID AND (ProductType IS NOT NULL OR ProductDate IS NOT NULL) ) BEGIN SET @IsAllNull = 0; END ELSE BEGIN -- 无任何非空行,所有指定列均为NULL,返回true SET @IsAllNull = 1; END END
调用示例
DECLARE @Result BIT; EXEC CheckProductColumnsAllNull @ProductID = 123, @IsAllNull = @Result OUTPUT; SELECT @Result AS CheckResult;
逻辑说明
- 完全匹配需求规则:只要存在至少一行的
ProductType或ProductDate非空就返回false,所有行的两列都为NULL时返回true - 如果传入的
@ProductID没有匹配的行,也会返回true,因为不存在包含非空列的行,符合逻辑预期 EXISTS判断会在找到第一条符合条件的非空行时立即终止查询,相比统计行数的写法性能提升明显,尤其匹配行数量较多时优势更大
内容的提问来源于stack exchange,提问作者CertGuy
相关产品推荐
相关产品推荐

