我习惯于使用stringbuilder来构建要执行的Sql语句,因为这使我可以在代码中保持该语句的格式和可读性。但是,它可能产生带有许多额外空白的无效语句:

sb.AppendLine (@"SELECT DISTINCT *");
sb.AppendLine (@"    FROM (  SELECT col1");
sb.AppendLine (@"                 ,  col2");
sb.AppendLine (@"                 ,  col3 ");
sb.AppendLine (@"                 ,  col4");
sb.AppendLine (@"              FROM (SELECT *");
sb.AppendLine (@"                      FROM TABLE )";
sb.AppendLine (@"             WHERE col5= col1 ");
sb.AppendLine (@"             AND col6 = col2 ");
sb.AppendLine (@"          GROUP BY col1");
sb.AppendLine (@"                 ,  col2");
sb.AppendLine (@" ORDER BY col3");


此sql是问题的一个示例,甚至可能不正确。

我应该在将其传递给要执行的命令对象之前从中剥离空格吗?还是命令本身会执行此操作,或者这只是一个微不足道的优化,不值得考虑?

最佳答案

这就是我在代码中声明SQL查询的方式:

string query = @"
    select columns
    from table
    where condition = 1
";


这里是优点:


更好的可读性,没有混乱
我可以轻松地将SQL块复制到SQL客户端工具/从SQL客户端工具复制SQL块
版本控制差异工具将轻松地向我显示仅在查询中发生了什么变化。


到目前为止没有缺点:)

更新资料

哦,是的,我认为担心多余的空格会导致过度优化。

09-27 13:46