翻譯|使用教程|編輯:楊鵬連|2020-07-09 14:39:54.793|閱讀 250 次
概述:如果使用equals SQL提示符聲明列別名,將會(huì)違反樣式規(guī)則(ST002)。最好遵循ANSI-SQL92標(biāo)準(zhǔn),使用AS關(guān)鍵字分配別名。如果別名不是標(biāo)準(zhǔn)標(biāo)識(shí)符,則用雙引號(hào)分隔它。使用單引號(hào)一直以來(lái)都不被提倡(DEP021)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
SQL Prompt是一款實(shí)用的SQL語(yǔ)法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫(kù)的對(duì)象名稱、語(yǔ)法和代碼片段自動(dòng)進(jìn)行檢索,為用戶提供合適的代碼選擇。自動(dòng)腳本設(shè)置使代碼簡(jiǎn)單易讀--當(dāng)開(kāi)發(fā)者不大熟悉腳本時(shí)尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進(jìn)行自定義,使之以預(yù)想的方式工作。
如果使用equals SQL提示符聲明列別名,將會(huì)違反樣式規(guī)則(ST002)。最好遵循ANSI-SQL92標(biāo)準(zhǔn),使用AS關(guān)鍵字分配別名。如果別名不是標(biāo)準(zhǔn)標(biāo)識(shí)符,則用雙引號(hào)分隔它。使用單引號(hào)一直以來(lái)都不被提倡(DEP021)。
曾經(jīng)有一段時(shí)間,SQL Server和Sybase中的列別名只是通過(guò)賦值表達(dá)式來(lái)聲明的,而有些人仍然喜歡用舊的方法來(lái)聲明,就像我們中的一些人仍然喜歡跳線舞,或者穿緊身衣唱歌。如今,其他關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),如PostgreSQL、MySQL、SQLite和Oracle,都使用as語(yǔ)法作為別名,就像ANSI-SQL92標(biāo)準(zhǔn)中定義的那樣,該標(biāo)準(zhǔn)用于為結(jié)果的列分配名稱。
無(wú)論古老的語(yǔ)法對(duì)您有多方便,通常最好還是堅(jiān)持這種官方語(yǔ)法。首先,很可能將來(lái)有人將不得不維護(hù)您的代碼,并且可能會(huì)因?yàn)闆](méi)有學(xué)習(xí)過(guò)這些代碼而對(duì)這些非標(biāo)準(zhǔn)的語(yǔ)法感到不解。其次,微軟可以很容易地決定在SQL Server中支持舊的Sybase語(yǔ)法不再方便,您的代碼也不會(huì)傳輸?shù)叫掳姹尽?/span>
列別名侵犯
看在以前的份上,有很多SQL Server可以容忍的方法。下面的一些示例使用舊樣式,即使用equals聲明列別名,這會(huì)導(dǎo)致SQL Prompt引發(fā)與樣式規(guī)則(ST002)的沖突,而其他示例則使用字符串文本(“Tables”)作為列別名,這早就被棄用了,因此違反了SQL Prompt不推薦使用的語(yǔ)法規(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種變體中,只有兩種選擇語(yǔ)句遵循官方的ANSI語(yǔ)法,即使用AS關(guān)鍵字,并在必要時(shí)將標(biāo)識(shí)符放在雙引號(hào)中。在SQL Server 2016中,' string_alias ' = expression的使用被標(biāo)記為不推薦使用,但這確實(shí)適用于任何單引號(hào)的使用。
我認(rèn)為最安全的方法是使用ANSI語(yǔ)法。如果文字不符合SQL Server標(biāo)識(shí)符的規(guī)則,或者是保留字,那么它應(yīng)該使用雙引號(hào),而不是單引號(hào)字符串分隔符。SQL Server首選的方括號(hào)分隔別名的用法來(lái)自Sybase。
我意識(shí)到AS關(guān)鍵字是可選的,但是使用可選的ANSI關(guān)鍵字是一個(gè)好習(xí)慣,如果它能使代碼更易于閱讀和理解,盡管可能會(huì)過(guò)度使用。我們所有人都不喜歡使用 NATIONAL CHARACTER VARYING( n ),而不是NVARCHAR(n)。
所以,我認(rè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ǔ)法,否則應(yīng)該避免使用它,因?yàn)樗皇菢?biāo)準(zhǔn)的SQL,而且只能容納為以前版本的SQL Server編寫的遺留代碼。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: