【发布时间】:2009-10-09 13:14:12
【问题描述】:
我想采用一个设计不佳的嵌入在 C# 代码中的 SQL 语句并将其重写为存储过程(大概),并且正在寻找一种适当的方法来解决以下模式:
sql = "SELECT <whatever> FROM <table> WHERE 1=1";
if ( someCodition.HasValue )
{
sql += " AND <some-field> = " + someCondition.Value;
}
这是一个简化。实际的语句很长,并且包含几个这样的条件,如果条件存在,其中一些包括INNER JOIN 到其他表中。最后一部分是关键,否则我可能能够解决所有这些问题:
WHERE <some-condition-value> IS NULL OR <some-field> = <some-condition-value>
我能想到几种可能的方法。我正在寻找正确的方法。
编辑: 我不想在 C# 中执行连接。我认为这是对安全性的严重妥协。
【问题讨论】:
-
一定要避免Sql Injection。
-
@Pierre:我们在这里达成一致。我想我的问题可以表述为“如何在不实际执行连接的情况下连接 SQL 语句。”
-
我已经更新了我的答案,看看它是否有帮助..
-
@Binoj - 所有答案都很有帮助!幸运的是,我有足够的准备时间将其转化为扎实的学习经验,因此在继续之前,我将通读 @KM 引用的文档。
标签: sql-server stored-procedures select concatenation