当前位置:  开发笔记 > 数据库 > 正文

使用可选的存储过程参数

如何解决《使用可选的存储过程参数》经验,为你挑选了1个好方法。

我正在使用几个可选参数处理存储过程.其中一些参数是单个值,使用WHERE子句很容易,如:

WHERE (@parameter IS NULL OR column = @parameter)

但是,在某些情况下,WHERE条件更复杂:

WHERE (@NewGroupId IS NULL OR si.SiteId IN (SELECT gs.SiteId
FROM [UtilityWeb].[dbo].[GroupSites] AS gs
WHERE gs.GroupId = @NewGroupId))

当我取消注释这些复杂的WHERE子句时,查询执行时间加倍,执行计划变得非常复杂.虽然执行计划不会打扰我,但是查询的执行时间加倍是一个明确的问题.

是否存在其他人在其存储过程中使用可选参数时发现的最佳实践或模式?

这是动态SQL是更好的解决方案吗?



1> GvS..:

我会为可用或不可用的参数创建单独的查询.

这将创建更简单的SQL,优化器将做得更好.

像这样:

if (@parameter IS NULL) then begin
   select * from foo
end
else begin
   select * from foo where value = @parameter
end

在你需要重新设计许多参数时,你需要动态的sql解决方案,然后也总是使用参数,你可能会被SQL-Injection错误所困扰.

组合也是可能的.最可能使用的查询/查询,您可以完整编码,并获得预编译.所有其他组合都是动态创建的.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有