咱們每一個人都知道是個很差的作法,但有時咱們仍是要這樣作:咱們執行SELECT * 語句。這個方法有不少弊端:sql
如今的問題是你如何阻止SELECT *語句?固然你能夠進行代碼審覈,你能夠提供最佳模式指導,但誰最終會留意這些?基本上沒有人——很遺憾這就就是使人傷心的事實……架構
但有一個很是簡單方法來阻止SELECT *語句,在表裏用技術層面來解決。ide
這個問題的解決方法很是簡單:在你的表定義上增長一個產生除零錯誤的的計算列。這個方法超簡單,但卻真正有效。咱們來看下面的表定義:post
1 -- Create a simple table with a computed column that generates 2 -- a divide by zero exception. 3 CREATE TABLE Foo 4 ( 5 Col1 INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, 6 Col2 CHAR(100) NOT NULL, 7 Col3 CHAR(100) NOT NULL, 8 DevelopersPain AS (1 / 0) 9 ) 10 GO 11 12 -- Insert some test data 13 INSERT INTO Foo VALUES ('a', 'a'), ('b', 'b'), ('c', 'c') 14 GO
如你所見,我這裏增長了一個進行除零的計算列。這表示當是查詢這個列時,你會獲得一個錯誤信息——例如在SELECT * 語句裏:學習
1 -- A SELECT * statement doesn't work anymore, ouch... 2 SELECT * FROM Foo 3 GO
但另外一方面若是你經過名稱指定查詢列,你不會反悔計算列,你的查詢如願正常執行:spa
1 -- This SQL statement works 2 SELECT Col1, Col2, Col3 FROM Foo 3 GO
很不錯吧,是否是?設計
在各個交流會上我常常提到:有時咱們只是變得太複雜了!這個用計算列的方法很是簡單——確定須要表架構修改。但下次設計新表的時候,要記得用這個方法。code
感謝關注!blog
www.sqlpassion.at/archive/2015/10/26/how-to-prevent-select-statements/索引
注:此文章爲WoodyTu學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出此文連接!
若您以爲這篇文章還不錯請點擊下右下角的推薦,有了您的支持才能激發做者更大的寫做熱情,很是感謝!