我有一个很长的sql查询字符串保存到变量中。
1 sSQL ="select a bunch of stuff from multiple tabled" +
2 "where conditions are met" +
3 "and other conditions are met" +
4 "order by these columns";
我现在需要做的是在3和4之间添加一条if语句。或者我需要找出一些其他方法,这些方法不会让我放置两个大量的sql代码块,除了一行之外,这些代码块大多是冗余的。
守则需要:
if (proSeries)
{
"unique sql code to add only if proSeries is true" +
}
它不喜欢字符串中的块。我能想到的另一种方法就是将整个sql字符串复制到两个单独的变量中并将它们放入if / else。
答案 0 :(得分:4)
您无法在变量声明中使用条件逻辑。您可以但是,利用StringBuilder
:
StringBuilder sqlText = new StringBuilder();
sqlText.AppendLine("select a bunch of stuff from multiple tabled");
...
if (proSeries)
{
sqlText.AppendLine("unique sql code to add only if proSeries is true");
}
sqlText.AppendLine("order by these columns");
string finalText = sqlText.ToString();
如果你要经常运行它,你可以轻松地将它包装在函数调用中。
答案 1 :(得分:2)
当涉及到多个条件时,我有时会执行以下操作,我认为这些条件非常易读:
sSQL = "select a bunch of stuff from multiple tables " +
"where conditions are met " +
"#AND_PROSERIES_CRITERIA# " +
"and other conditions are met " +
"order by these columns ";
// Build all criteria strings
String sProSeriesCriteria = (proSeries) ? "and ....." : "";
// Insert all criteria
sSQL = sSQL.Replace("#AND_PROSERIES_CRITERIA#", sProSeriesCriteria);
嗯,使用更多标准,效果更好,例如选择所有订单
你明白了。有了许多这样的可选标准,你仍然可以编写一个可读的查询,然后你可以计算出这些部分。