SQL如何在输入为空时返回空结果而非返回全表匹配数据
问题原因
你当前的写法中,当 @ModelioPavadinimas 参数为空字符串时,拼接后得到的匹配规则是 %,LIKE % 会匹配所有非空的ModelioPavadinimas字段值,因此会返回全表所有符合隐含条件的数据。如果参数是NULL值,SQL Server中NULL拼接任意字符结果都是NULL,LIKE NULL 返回未知结果,不会返回数据,所以你的问题仅出现在参数为空字符串的场景。
解决方案
你可以选择下面任意一种方式实现需求:
方案1:直接修改SQL查询语句,新增参数非空校验
仅需要在WHERE子句中增加参数非空判断逻辑即可,原有匹配逻辑不需要调整,不需要修改应用层代码:SELECT * FROM dbo.BarcodeData WHERE -- 空字符串时直接不满足条件,返回空结果 @ModelioPavadinimas <> '' AND ModelioPavadinimas LIKE @ModelioPavadinimas + '%';如果你需要兼容参数可能为NULL的场景,可以再加一层NULL校验:
SELECT * FROM dbo.BarcodeData WHERE @ModelioPavadinimas IS NOT NULL AND @ModelioPavadinimas <> '' AND ModelioPavadinimas LIKE @ModelioPavadinimas + '%';方案2:应用层提前校验拦截
在用户提交参数后、发起数据库查询前,先判断参数是否为空,为空时直接返回空结果,不需要访问数据库,性能更优。
内容的提问来源于stack exchange,提问作者Mantvydas Smilgis
相关产品推荐
相关产品推荐

