2011-01-19 126 views
0

我知道这个问题已被问及辩论之前。我读过的答案大多是意见,所以我正在寻找更多技术性的东西。更多“引擎盖下”。存储过程与11+动态参数

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

我知道如何做到这一点,而无需使用动态SQL:

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

这样做,因为加入等我从来没有使用动态SQL缺点。但从我读过的内容来看,这似乎是动态SQL的一种情况。

任何人都可以提供一些技术指标吗?

+1

请参阅[动态搜索条件在T-SQL](http://www.sommarskog.se/dyn-search.html)为相当详尽的审查这个话题。 – 2011-01-19 20:46:53

回答

1

你需要记住,如果你不想使用动态SQL(和我也不会觉得要),那么DRY原则就是在窗外。

有效利用TVP的和接受的事实,你将有一定程度的高复杂度(一个SQL语句)

如果你想要的一切缓存和优化搜索,你应该考虑如何将其在多个程序设计然后根据需要打破你的条件。

另一种非常常见的做法是将包括诸如条件:

WHERE (@pParam IS NULL OR ~condition~) 

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

+0

你的最后一行是完全错误的。这种做法使潜在的可搜索搜索谓词不可靠,并导致不必要的表扫描。 – 2011-01-19 22:45:56