【问题标题】:How to format a SQL string into a readable block of code that is well formatted and more easy to read如何将 SQL 字符串格式化为格式良好且更易于阅读的可读代码块
【发布时间】:2015-10-19 11:53:12
【问题描述】:

当我编写构建动态 SQL 语句的代码时,我经常使用查询构建器工具(例如 MS Access 提供的工具)来生成语句的基础,然后我将在我的代码中使用它。

但是,如果此 SQL 语句的格式正确,则阅读代码会容易得多。任何人都可以提供有关如何最好地将本质上是一个很长的无格式 SQL 语句并将其转换为一个漂亮的文本字符串或一个更易于阅读的漂亮代码块的建议。

【问题讨论】:

  • 比格式化这些查询并将它们塞回源代码更好,我建议将其转换为存储过程。这允许更好的格式设置,并且您可以更轻松地分离应用程序的层。
  • 谢谢@Sean。你说在可用时使用 SP 是非常正确的。我必须摘下我的 Access 帽子,重新考虑更多 SQL Server!
  • @HarveyFrench 你可以使用dpriver 来格式化sql查询。
  • @learn 谢谢让我知道这件事。这是非常非常好的。易于使用且功能强大。就我的目的而言,不如 www.sqlinform.com 强大。他们都有自己的优势。 (例如,我可以找到一种方法让它在每一行的开头添加 aa a, " ......它接近了。很遗憾你不能克隆格式选项)。
  • 您可以通过将存储过程存储在表中来模拟此上下文 (MS Access) 中的存储过程。使用备注字段,您可以使用您喜欢的任何格式。按 CTRL+F2 打开缩放框并粘贴格式化的 SQL。

标签: sql sql-server excel vba ms-access


【解决方案1】:

我过去使用过这种技术,这是最好的方法吗?

关键是:

A.使用下面的“aa”程序,让阅读变得更容易。

B.如果您使用查询构建器(如在 MS Access 中)构建 SQL 字符串,最好配置一个实用程序来获取构建的 SQL 并重新格式化它,以便生成的 SQL 看起来与下面的完全一样。 (我用的是 www.sqlinform.com 但还有其他的,或者你可以手动做)

C.通过在每一行之前添加 vbCrLf,当 SQL 字符串在 VBA 中构建时,生成的字符串可以输出到即时窗口,以便于阅读,因为它会有线刹车并很好地排列。 (这不是火箭科学)

Public Sub aa(ByRef a As String, ByVal b As String)
    ' This is deliberately not a function, although it behaves a bit like one
    a = a & vbCrLf & b

End Sub


' The function is called in code like this:

Dim a as string 

a = ""
aa a, "    SELECT CUR.txtLevel      AS [Current]  "
aa a, "         , NLPMi.strFullName AS [Full Name]  "
aa a, "         , NLPMi.DOB         AS [Birthday]  "
aa a, "         , NLPMi.Surname     AS [Surname Name]  "
aa a, "         , TOOLS.txtWCMTool "

aa a, "      FROM ( ( ( tblPeopleWCMSKILLSByYear AS SKILLS"
aa a, "                 LEFT JOIN tblSkillLevels AS CUR  "
aa a, "                        ON SKILLS.bytCurrentID = CUR.atnSkillLevelID
aa a, "               ) "
aa a, "              INNER JOIN [qrylstNames-LPMi] AS NLPMi  "
aa a, "                      ON SKILLS.intPeopleID = NLPMi.atnPeopleRecID
aa a, "             )"
aa a, "            INNER JOIN tblWCMTools AS TOOLS "
aa a, "                    ON SKILLS.intWCMSkillID = TOOLS.atnWCMToolID"
aa a, "           ) "

aa a, "     WHERE ( ( (SKILLS.bytYearID) = YEAR(DATE())-2012 )  "
aa a, "           AND CUR.txtLevel   >= " & MyVariable1 & "  "
aa a, "           AND TOOLS.txtWCMTool = '" & MyVariable2 & "'"
aa a, "           )  "

aa a, "  ORDER BY NLPMi.strFullName"
aa a, "        ", " & MyVariable3 & ""

aa a, "  ;"

请注意:

  1. 表格连接的括号对齐

  2. 我使用大写别名来强化它们是别名,以便它们脱颖而出

  3. 1234563改变它的构建方式)
  4. 在 SELECT、ORDER BY 和 GROUP BY 子句中,我倾向于将列之间所需的逗号放在同一行的列名前面。

  5. 我不喜欢数据库表在其名称中包含类型,即 strFullName。但是,这不是我的架构!

哈维

【讨论】:

  • 如果需要修改 SQL,这看起来需要大量维护。
  • 并非如此。只需调试打印创建的 sql。编辑它,然后使用该工具重新格式化它以在 vba 中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2010-09-19
  • 2018-09-19
相关资源
最近更新 更多