将SQL标准应用于脚本

时间:2013-02-05 10:06:53

标签: sql sql-server sql-standards

我有以下脚本,并希望对其进行更改,以使其符合国际标准。我使用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 个答案:

答案 0 :(得分:7)

ISNULL更改为COALESCE并将方括号更改为",然后更改为it validates

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; 

这确实意味着您需要确保SQL Server中的QUOTED_IDENTIFIERON

答案 1 :(得分: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#代码一样“......新对象类型我只是组成〜()......” - 不太实用)。< / p>

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

http://sqlcop.lessthandot.com/