在SQL查询中使用动态条件
如果我有一个使用可选参数运行搜索的查询,我通常的方法是将
NULL
传递给任何未使用的条件,并且有一个WHERE
子句看起来像
WHERE (@Param IS NULL OR Field=@Param) AND (@Param2 IS NULL OR Field2=@Param2)
如果我的条件可能有点复杂,比如说LIKE
条款,那么SQL Server
会评估IS NULL
然后将更复杂的条件短路吗?我是否可以在执行计划中查看是否存在?这种行为是否依赖于优化器选择的计划,这样我的开发和生产环境中的答案可能会有所不同(我有限制地查看生产中发生了什么,所以我希望行为一致) 。
没有找到相关结果
已邀请:
3 个回复
雇砰
冉案
我会这样写:
看看你得到的查询执行计划,在很多情况下,当你使用OR条件时,查询优化器使用表扫描。您也可以将'='替换为'like'等,实际上您甚至可以将其包含在case语句中。所以你可以用'8'替换'=' 希望这可以帮助。
痰降锭骂奸
如您所见,我将-2应用于参数@CALL_GENERAL_REQUIREMENTS的空值,这是因为选择的实数值可以是0(未传递),1(传递), - 1(尚未评估)。所以-2表示不选择此字段 可空字符串字段的示例:
所有这些都可以作为一种魅力,并且避免了使用串联创建动态SQL字符串时的大量麻烦,并且不需要分配特定权限来运行exec语句。 希望这能帮助任何人,因为它帮助了我。 祝你有美好的一天