7

我有以下脚本并想更改它以使其符合国际标准。我使用 SQL-Server,但只要有可能,我想遵循 SQL 的国际标准。我不相信方括号是标准的 - 我应该用双引号替换它们吗?

无需付费即可获得标准文档的副本,互联网上是否有任何资源可以提供完全符合标准要求的格式和布局的脚本示例?

SELECT 
    a.UserAccountKey,
    SUM(ISNULL(b.[measure Y],0.0)) AS "measure Y",
    SUM(ISNULL(c.[measure Z],0.0)) AS "measure Z"
FROM 
    XXX a
    LEFT OUTER JOIN YYYY b ON
        a.UserAccountKey = b.UserAccountKey
    LEFT OUTER JOIN ZZZZ c ON
        a.UserAccountKey = c.UserAccountKey
GROUP BY
    a.UserAccountKey

编辑

我唯一不是经典标准的轻微偏好如下。这是由 AaronBertrand 提出的,我同意它更具可读性 - 特别是如果该SELECT子句有 20 或 30 个字段:

SELECT 
    a.UserAccountKey,
    "measure Y"             = SUM(ISNULL(b."measure Y",0.0)),
    "measure Z"             = SUM(ISNULL(c."measure Z",0.0)),
    "measure longertitle"   = SUM(ISNULL(c."measure longertitle",0.0)),
    "me short"              = SUM(ISNULL(c."me short",0.0))
FROM 
4

4 回答 4

7

更改ISNULLCOALESCE和方括号",然后验证.

SELECT a.UserAccountKey,
       SUM(COALESCE(b."measure Y", 0.0)) AS "measure Y",
       SUM(COALESCE(c."measure Z", 0.0)) AS "measure Z"
FROM   XXX a
       LEFT OUTER JOIN YYYY b
         ON a.UserAccountKey = b.UserAccountKey
       LEFT OUTER JOIN ZZZZ c
         ON a.UserAccountKey = c.UserAccountKey
GROUP  BY a.UserAccountKey; 

这确实意味着您需要确保它QUOTED_IDENTIFIERONSQL Server 中。

于 2013-02-05T10:11:33.600 回答
2

一个很好的在线免费 T-SQL 格式化程序是http://www.tsqltidy.com/,即用于 SQL Server。请小心,因为您的防火墙管理员可能会突然收到有关 SQL 注入攻击的警报(一些防火墙错误地使用该站点进行攻击)。否则,有具有格式化功能的商业工具 - SQL Complete (DevArt) 和 SQL Prompt (Red Gate)。

至于“国际标准 SQL”,那将更像是它自己的博客站点。哪个 ANSI 标准(1992、SQL3、...)以及达到什么级别?

虽然可以帮助您使用引号,但请使用 SET QUOTED_IDENTIFIER ON; 在你的 SQL 之前,然后关闭(SET QUOTED_IDENTIFIER OFF;)。这意味着您不需要为整个数据库打开它。但是,最好不要使用带有空格和非标准字符的标识符(就像 C# 中的代码一样,“... new Object type I just made up ~() ...” - 不太实用)。

这算作 2 个答案和另一个问题吗?

于 2013-02-05T18:48:17.023 回答
1

这是一个很好的 SQL 标准资源列表,包含不同的文档和所有内容:http: //gerardnico.com/wiki/language/sql/ansi

如果您正在为现有代码寻找 t-SQL 格式化程序,您还可以查看ApexSQL Refactor。这是一个免费的 SSMS 插件,类似于 Red Gate 的 SQL Promt。

于 2013-02-25T12:16:45.047 回答
0

另一个很棒的资源是 SQL Cop,它是一个免费工具,可以识别问题并提出最佳实践建议:

http://sqlcop.lessthandot.com/

于 2013-02-26T10:51:31.807 回答