• <menu id="w2i4a"></menu>
  • logo SQL Prompt教程

    文檔首頁>>SQL Prompt教程>>SQL Prompt使用教程:避免使用非標準的列別名(ST002和DEP021)

    SQL Prompt使用教程:避免使用非標準的列別名(ST002和DEP021)


    SQL Prompt是一款實用的SQL語法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動進行檢索,為用戶提供合適的代碼選擇。自動腳本設(shè)置使代碼簡單易讀--當開發(fā)者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進行自定義,使之以預(yù)想的方式工作。

    點擊下載SQL Prompt正式版

    如果使用equals SQL提示符聲明列別名,將會違反樣式規(guī)則(ST002)。最好遵循ANSI-SQL92標準,使用AS關(guān)鍵字分配別名。如果別名不是標準標識符,則用雙引號分隔它。使用單引號一直以來都不被提倡(DEP021)。

    曾經(jīng)有一段時間,SQL Server和Sybase中的列別名只是通過賦值表達式來聲明的,而有些人仍然喜歡用舊的方法來聲明,就像我們中的一些人仍然喜歡跳線舞,或者穿緊身衣唱歌。如今,其他關(guān)系數(shù)據(jù)庫系統(tǒng),如PostgreSQL、MySQL、SQLite和Oracle,都使用as語法作為別名,就像ANSI-SQL92標準中定義的那樣,該標準用于為結(jié)果的列分配名稱。

    無論古老的語法對您有多方便,通常最好還是堅持這種官方語法。首先,很可能將來有人將不得不維護您的代碼,并且可能會因為沒有學(xué)習過這些代碼而對這些非標準的語法感到不解。其次,微軟可以很容易地決定在SQL Server中支持舊的Sybase語法不再方便,您的代碼也不會傳輸?shù)叫掳姹尽?/span>

    列別名侵犯

    看在以前的份上,有很多SQL Server可以容忍的方法。下面的一些示例使用舊樣式,即使用equals聲明列別名,這會導(dǎo)致SQL Prompt引發(fā)與樣式規(guī)則(ST002)的沖突,而其他示例則使用字符串文本(“Tables”)作為列別名,這早就被棄用了,因此違反了SQL Prompt不推薦使用的語法規(guī)則之一(DEP021)。

    SELECT Tables = Schema_Name(schema_id)+'.'+[name] FROM sys.tables 
      SELECT "Tables" = Schema_Name(schema_id)+'.'+[name] FROM sys.tables 
      SELECT [Tables] = Schema_Name(schema_id)+'.'+[name] FROM sys.tables 
      SELECT 'Tables' = Schema_Name(schema_id)+'.'+[name] FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] [Tables] FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] 'Tables' FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] "Tables" FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] Tables FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] AS [Tables] FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] AS 'Tables' FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] AS "Tables" FROM sys.tables 
      SELECT Schema_Name(schema_id)+'.'+[name] AS Tables FROM sys.tables

    所有這些都給出了相同的結(jié)果。

    別名的正確方法

    但是,在這12種變體中,只有兩種選擇語句遵循官方的ANSI語法,即使用AS關(guān)鍵字,并在必要時將標識符放在雙引號中。在SQL Server 2016中,' string_alias ' = expression的使用被標記為不推薦使用,但這確實適用于任何單引號的使用。

    我認為最安全的方法是使用ANSI語法。如果文字不符合SQL Server標識符的規(guī)則,或者是保留字,那么它應(yīng)該使用雙引號,而不是單引號字符串分隔符。SQL Server首選的方括號分隔別名的用法來自Sybase。

    我意識到AS關(guān)鍵字是可選的,但是使用可選的ANSI關(guān)鍵字是一個好習慣,如果它能使代碼更易于閱讀和理解,盡管可能會過度使用。我們所有人都不喜歡使用 NATIONAL CHARACTER VARYING( n ),而不是NVARCHAR(n)。

    所以,我認為最好的形式是……

    SELECT Schema_Name(schema_id)+'.'+[name] AS Tables FROM sys.tables

    …或…

    SELECT Schema_Name(schema_id)+'.'+[name] AS "My Tables" FROM sys.tables

    除非您特別喜歡使用老式的賦值語法,否則應(yīng)該避免使用它,因為它不是標準的SQL,而且只能容納為以前版本的SQL Server編寫的遺留代碼。

    試用下載>>>

    SQL Prompt 使用教程>>>


    想要購買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請點擊【咨詢在線客服】

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();