不确定这是否可行,在字符串sql变量中使用if语句

时间:2014-09-12 17:54:38

标签: c# sql

我有一个很长的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。

2 个答案:

答案 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);

嗯,使用更多标准,效果更好,例如选择所有订单

  • 来自所有供应商或只是某些供应商
  • 适用于所有产品或只是某些产品和
  • 其中存在或不存在在另一个表中返回
  • ...

你明白了。有了许多这样的可选标准,你仍然可以编写一个可读的查询,然后你可以计算出这些部分。