SQL Server: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,避免了直接访问系统表,这将使某些权限受限的用户直接受益。

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;

sys.columns(全部列):包含sys.all_columns (用户定义列)、sys.system_columns (系统定义列)
-sys.columns 为包含列的对象(如视图或表)的每一列返回一行。
——sys.all_columns 显示属于用户定义对象和系统对象的所有列的联合。
——sys.system_columns 具有列的系统对象的每列都对应一行。
type对象类型列表

SQL Server:INFORMATION_SCHEMA.columns 与sys.columns 与 syscolumns对比的更多相关文章
- sql server查询可编程对象定义的方式对比以及整合
本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4. ...
- SQL Server 2016里的sys.dm_exec_input_buffer
在你的DBA职业里,你们谁有用过DBCC INPUTBUFFER命令,来获得已经提交到SQL Server特定会话的最后SQL语句?请举手!大家都用过! 我们都知道DBCC命令有点尴尬,因为你不能在T ...
- SQL server 2008里面通过sys.dm_exec_procedure_stats得到存储过程的执行信息--转
--转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/05/13/sql-server-2008-sys-dm-exec-procedure-stats. ...
- SQL Server中count(*), count(col), count(1)的对比
让我们先看一下BOL里面对count(*)以及count(col)的说明: COUNT(*) 返回组中的项数.包括 NULL 值和重复项. COUNT(ALL expression) 对组中的每一行都 ...
- SQL Server注入
1.利用错误消息提取信息 1.1 枚举当前表与列 --' 抛出错误:选择列表中的列 'users.id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中. 发现表名为 'users',存 ...
- 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...
- SQL Server 诊断查询-(1)
Query #1 is Version Info. SQL and OS Version information for current instance SELECT @@SERVERNAME AS ...
- SQL Server索引进阶:第五级,包含列
原文地址: Stairway to SQL Server Indexes: Level 5, Included Columns 本文是SQL Server索引进阶系列(Stairway to SQL ...
随机推荐
- win10 磁盘占用高--- 禁用用户改善反馈 CompatTelRunner.exe
1. 2.右键点开[这台电脑],点[管理],点[服务和应用程序]点[服务],在右边框里把[superfetch] [windows search][HomeGroupListener] [HomeGr ...
- [转]腾讯云Linux云服务器文件上传利器——WinSCP
本文转自:http://bbs.qcloud.com/thread-4379-1-1.html WinSCP简介 WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持S ...
- Spring Security基本配置
Spring Security 是一个功能强大且可高度自定义的身份验证和访问控制框架. 它是保护基于Spring的应用程序的事实上的标准.Spring Security 是一个专注于为Java应用程序 ...
- Eclipse中使用printf报错 提示参数类型不对
报错信息: The method printf(String, Object[]) in the type PrintStream is not applicable for the argument ...
- 奇妙的数字-2015省赛C语言A组第三题
奇妙的数字 小明发现了一个奇妙的数字.它的平方和立方正好把0~9的10个数字每个用且只用了一次.你能猜出这个数字是多少吗? 请填写该数字,不要填写任何多余的内容.
- Spring Security(二)
Spring Security(二) 注:凡是源码部分,我已经把英文注释去掉了,有兴趣的同学可以在自己项目里进去看看.:-) 定义用户认证逻辑 用户登录成功后,用户的信息会被 Security 封装在 ...
- c# 连等的写法都做了什么?
在工作中遇到这样一个问题,批量对变量赋值相同的值时,如下: a = ; b = ; c = ; d = ; 我想这样写: a= b = c = d = ; 分别对应IL: Dup 复制计算堆栈上当前最 ...
- CSS 水平居中和垂直居中
1.水平居中——行内元素 text-align: center; 2.水平居中——定宽块状元素 margin: auto,满足定宽和块状两个条件的元素是可以通过设置“左右margin”值为“auto” ...
- MongoDB数据库在centos下的操作
简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...
- javascript 数组求交集/差集/并集/过滤重复
最近在小一个小程序项目,突然发现 javscript 对数组支持不是很好,连这些基本的功能,都还要自己封装.网上查了下,再结合自己的想法,封装了一下,代码如下. //数组交集 Array.protot ...