SQL Server(00):INFORMATION_SCHEMA.columns 與sys.columns 與 syscolumns對比


sys.columns視圖

sys.columns是SQL Server從2005版本起引入的新的系統級視圖。相關鏈接如下:

Mapping SQL Server 2000 System Tables to SQL Server 2005 System Views
https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms187997(v=sql.90)
sys.columns vs syscolumns
http://luke.breuer.com/time/item/syscolumns_vs_syscolumns/624.aspx
使用sys.columns,避免了直接訪問系統表,這將使某些權限受限的用戶直接受益。

image

 

INFORMATION_SCHEMA.columns 視圖

而 INFORMATION_SCHEMA.columns 和 sys.columns 相比,INFORMATION_SCHEMA.columns更推薦。

因為INFORMATION_SCHEMA.columns是符合ISO標准的,而sys.columns這種東西是微軟自家搞出來的私有的東西。

其實INFORMATION_SCHEMA.columns 和 sys.columns二者本質上來說都是view。二者本質一樣的前提下,我們推薦符合ISO標准的,這樣的話這種experience也能和其它database的experience保持一致。

關於INFORMATION_SCHEMA,相關鏈接如下:

Information Schema Views (Transact-SQL)
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-information-schema-views/system-information-schema-views-transact-sql?view=sql-server-2017


因此,舉個例子,假如我們要判斷某個表是否存在某個字段,如果不存在則添加該字段並且綁定一個默認值,那么我的推薦寫法如下:

-- Alter table LabelSkin: Add column Width 
  
 if not exists 
 (
     select column_name from INFORMATION_SCHEMA.columns where table_name = 'LabelSkin' and column_name = 'Width'
 )
     ALTER TABLE dbo.LabelSkin 
     ADD Width numeric(18, 0) NOT NULL 
     CONSTRAINT DF_LabelSkin_Width DEFAULT 0;

image

 

sys.columns(全部列):包含sys.all_columns (用戶定義列)、sys.system_columns (系統定義列)

 

-sys.columns 為包含列的對象(如視圖或表)的每一列返回一行。
——sys.all_columns 顯示屬於用戶定義對象和系統對象的所有列的聯合。
——sys.system_columns 具有列的系統對象的每列都對應一行。

type對象類型列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM