2013-02-05 32 views
7

我有以下腳本並希望對其進行更改以符合國際標準。我使用SQL-Server,但只要有可能,我想遵循SQL的國際標準。我不認爲方括號是標準的 - 我應該用雙引號替換它們嗎?將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 
+0

在實踐中,你可以使用sqlfiddle.com,看看你的查詢(或小的子集)運行時沒有抱怨sqlfiddle.com支持的所有數據庫:MSSQL,Oracle,MySQL,Postgres,SQLite – mvp

+3

關注標準 –

+0

提高了您的評論(....你開始關心這些標準) – whytheq

回答

7

變化ISNULLCOALESCE和方括號"然後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; 

這意味着你需要確保QUOTED_IDENTIFIER是SQL Server ON

+0

+1對於很好的解釋和參考 - 羞恥mimer實際上並沒有給我糾正的代碼,而不是錯誤所在的位置。 – whytheq

+0

就格式而言,除了我的手指之外,是否有一些工具可以快速標準化腳本的格式? – whytheq

+0

@whytheq - 沒有格式化的國際標準,只有語法。有各種商業美元。如SQL Pretty Printer或Redgate SQL Prompt。 –

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#的代碼類似於「......新的對象類型我剛剛構成〜()...」一樣)。

這算兩個答案和另一個問題嗎?

+0

+1感謝您的信息 - 我會花一點時間檢查sqltidy – whytheq

+0

...我已經添加了OP的編輯,顯示爲什麼tsqltidy可能不會爲我工作 – whytheq