存储过程具有11个以上的动态参数

时间:2011-01-19 20:44:53

标签: sql sql-server windows-server-2008 dynamic-sql

我知道这个问题之前已被提出并进行过辩论。我读过的答案主要是意见,所以我正在寻找更具技术性的东西。更多“引擎盖下”。

我正在使用SQL Server 2008.我即将编写一个需要接受至少11个输入的查询。用户可以指定1到11(+)这些。它们有各种类型(ID,文本匹配,地理,全文匹配,记录集等)。它与SQL一样动态。

我知道如何在不使用动态SQL的情况下执行此操作:

/*for simple match*/ WHERE @Input IS NOT NULL OR t.col = @Input

由于连接等原因,这有缺点我不会使用动态SQL。但是根据我的阅读,似乎这可能是动态SQL的一种情况。

有人可以提供一些技术指标吗?

2 个答案:

答案 0 :(得分:3)

http://www.sommarskog.se/index.html

查看Dynamic SQl和动态搜索条件链接的诅咒和祝福

答案 1 :(得分:1)

你需要记住,如果你不想使用动态SQL(我也不想),那么DRY原则就是在窗外进行排序。

有效利用TVP并接受这样一个事实,即你的圈复杂度会有些高(对于SQL语句)

如果您希望所有内容都可以缓存和搜索,您应该考虑如何在多个过程中设计它,然后根据需要打破您的条件。

另一种非常常见的方法是包括以下条件:

WHERE (@pParam IS NULL OR ~condition~)

如果您的参数为NULL,则SQL不会打扰解决条件的另一半。 编辑:最后一部分仅适用于SQL2008R2,并且仅在使用OPTION(RECOMPILE)命令

时才适用