对于从中途开始使用任何一个长期存在的软件来说,没有了解该软件的更新升级历史的情况下,去网络搜索怎样使用一个功能的时候,往往是发现各种各样的操作,仿佛这样也行,那样也行。
由此被搞的头晕脑胀的,自己实际使用的时候,也是半清不楚的会出现各种问题。
Sql server中,在使用系统表来判断一个表是否存在,或者一个表字段是否存在的时候,会用到系统表. sysobjects。 一搜索,会发现有的post使用sys.objects,有的post使用sys.objects,对应的表字段也会略有不同。
经查证,是因为sql server版本更新,2000年以前的数据库版本使用的系统表名sysobjects,而此后使用的表是sys.objects. 为了向后兼容起见,2000后的版本仍然保留sysobjects表,但不建议使用,未来版本可能会删除,
因此新版本的开发推荐使用新表sys.objects。
类似的其他系统表也有同样的更新,具体的对应关系,可以参考微软官方的post如下:
微软的映射表名关系:
了解了如上的历史渊源关系以后,就可以在搜索到各种各样的post以后,做到心中有数,也不会不清不楚了。老的查询和使用方法,在新的表中仍然可以用,只要注意对应的表名和表字段即可。
如下篇是对老的sysobjects介绍:
https://www.cnblogs.com/atree/p/sql-server-sysobjects.html
如下篇,是个答问,介绍了sys.objects(object_id, type)和sysobjects(id,xtype)的关系:
以下就是使用系统表的方法posts,请在新的表中使用,并注意用对字段。
各种判断:
https://www.cnblogs.com/gossip/archive/2011/04/10/2011489.html
https://blog.csdn.net/smartsmile2012/article/details/78529510
更好的方法:
查看sqlserver数据库有哪些表可以使用以下sql语句:
select name from sysobjects where xtype='u';
或者select * from sys.tables;
或者SELECT * FROM INFORMATION_SCHEMA.TABLES;
1、方法一
SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='表名'
2、方法二
select a.name tablename, b.name colName, c.name colType ,c.length colLength
from sysobjects a inner join syscolumns b
on a.id=b.id and a.xtype='U'
inner join systypes c
on b.xtype=c.xusertype
where a.name='表名'