SQL Server:INFORMATION_SCHEMA.columns vs sys.columns vs syscolumns

来源:互联网 发布:淘宝店铺商标注册 编辑:程序博客网 时间:2024/06/05 09:04

首先,sys.columns vs syscolumns,这个自不必多说。

sys.columns是SQL Server从2005版本起引入的新的系统级视图。相关链接如下:

  • Mapping SQL Server 2000 System Tables to SQL Server 2005 System Views
    http://technet.microsoft.com/en-us/library/ms187997%28SQL.90%29.aspx
  • sys.columns vs syscolumns
    http://luke.breuer.com/time/item/syscolumns_vs_syscolumns/624.aspx

使用sys.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)
    http://msdn.microsoft.com/en-us/library/ms186778.aspx


因此,举个例子,假如我们要判断某个表是否存在某个字段,如果不存在则添加该字段并且绑定一个默认值,那么我的推荐写法如下:

-- 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;


原创粉丝点击