【发布时间】:2014-08-29 17:59:05
【问题描述】:
我正在开发一个现有的 ASP.NET 应用程序。当前应用程序使用了大量的内联查询。现在他们只想将所有查询重写为存储过程。
我的问题是,这些查询非常“动态”,并且查询是根据不同的if...else 条件连接起来的,例如:
string query = "Select * from EmpTable WHERE EmpType ='ACTIVE'";
if (conditionA == true)
query += "AND ID = 12345 ";
if (conditionB == true)
query += "AND Dept = 'Finance' ";
else
query += "AND Dept <> 'Finance' ";
if (conditionC == true)
query += "Order by EmpID";
else if (ConditionD == true)
query += "Order by Dept";
他们还希望避免使用动态查询。我有哪些选择?
已编辑:我知道我也可以使用存储过程构建动态查询,我只是想知道还有哪些其他“不那么痛苦”的选项。
【问题讨论】:
-
维护噩梦
-
好吧,您可以将条件作为参数传递给 SP 并在那里构建动态 SQL。不是最好的方法,但最不痛苦
-
如果处理得当,动态查询可以与静态查询一样高效。或许“他们”只有编写糟糕的动态 SQL 的经验。
-
如果这绝对肯定是存储过程,是否可以在客户端创建多个过程和条件语句?对于这种情况,我不建议使用存储过程,但我知道一旦他们学习了一项新技术,管理会如何。
-
您是否考虑过为您的存储过程使用默认参数值?然后,您可以从 .NET 代码中为参数值传递 null,SQL 将忽略 NULL 并使用参数默认值。不涉及条件逻辑。
标签: asp.net sql-server stored-procedures