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 ...
随机推荐
- C指针与内存
C指针与内存 指针是C / C++ 中重要的构造类型,指针赋予了C / C++程序直接访问和修改内存的能力.C / C++的许多重要应用,如编译.OS.嵌入式开发都依赖于这种能力. 冯诺依曼体系的计算 ...
- C# Azure 用Webhook添加警报规则
本篇文章的目的是什么? Azure云端一直困扰着我的是,如果遇到数据库累积数据量过大.数据库DTU过大.应用程序服务访问量过大等,我们都没办法知道他们什么时候过大.只能做的是,我们天天看着我们的应用, ...
- python学习之内存机制
不可变对象(字符串.元组) 1. a = 1 首先在内存中创建对象1,并记录对象的引用计数为1次. id(a) 查看变量a引用的对象的内存地址 2. b = 1 内存中已存在对象1,变量b引用对象1, ...
- 使你的IT职业生涯更上一层楼de14条建议
摘要:升值为企业IT部门的领导者,是大部分IT技术人员职业生涯的最终追求.但从一般大众中脱颖而出,并非易事.仅仅把本职工作干好远远不够,还需要IT技术人员展示出投身于技术发展的奉献精神及伴随技术发展而 ...
- SSH无密码登录的原理及配置
一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...
- Redis哨兵(sentinel)模式搭建
一.Sentinel介绍 之前骚了一波Redis的简介及应用场景,今天试了下他的哨兵模式: Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentine ...
- 【原】DjianGo Windows7下的安装
安装DjianGo前必须安装Python环境,由于已经装过,这里不再贴出安装Python的步骤,我的Python版本是3.2. 1.下载django https://github.com/django ...
- Java - Stack源码解析
Java提高篇(三一)-----Stack 在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出 ...
- Oracle Index 索引无效原因
索引无效原因 最近遇到一个SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s.虽然几张表的数据量都比较大(都在百万级以上),但是也都有正确创建索引,不知道 ...
- HDU6188
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...