将内联SQL转换为存储过程

时间:2014-07-08 20:43:30

标签: asp.net sql-server stored-procedures

我正在开发一个现有的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";

他们还希望避免使用动态查询。我有什么选择?

编辑:我知道我也可以使用存储过程构建动态查询,我只是想知道那里有什么其他“减少痛苦”选项。

1 个答案:

答案 0 :(得分:3)

传入您可能需要的所有参数,并使用IsNull和/或When子句创建与原始程序中相同的查询。

或者,您可以简单地在sproc本身中动态构建查询,或者只是为每个排列创建一个查询。不一定很有趣,或者很聪明,但是可以在将来更容易维护 - 特别是当你可以将它作为未来重构sprocs的垫脚石时。

编辑:还有一个原因可以简单地将它们全部转换为sprocs - 当未来的开发人员出现并希望添加一些SQL时,他们将遵循约定并自己创建一个新的sproc。我想象一下你的代码充斥着动态SQL的一个原因是因为它已经充斥着动态SQL。也许随着时间的推移,你可以改进它们(slap 遗留,必须修复在每个转换的顶部),你也可以让它们自己修复设计。