Sql server中关于判断表,存储过程或者列是否存在的语句

对于从中途开始使用任何一个长期存在的软件来说,没有了解该软件的更新升级历史的情况下,去网络搜索怎样使用一个功能的时候,往往是发现各种各样的操作,仿佛这样也行,那样也行。

 由此被搞的头晕脑胀的,自己实际使用的时候,也是半清不楚的会出现各种问题。

Sql server中,在使用系统表来判断一个表是否存在,或者一个表字段是否存在的时候,会用到系统表. sysobjects。 一搜索,会发现有的post使用sys.objects,有的post使用sys.objects,对应的表字段也会略有不同。

经查证,是因为sql server版本更新,2000年以前的数据库版本使用的系统表名sysobjects,而此后使用的表是sys.objects. 为了向后兼容起见,2000后的版本仍然保留sysobjects表,但不建议使用,未来版本可能会删除,

因此新版本的开发推荐使用新表sys.objects。

类似的其他系统表也有同样的更新,具体的对应关系,可以参考微软官方的post如下:

微软的映射表名关系:

https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/mapping-system-tables-to-system-views-transact-sql?view=sql-server-ver15

了解了如上的历史渊源关系以后,就可以在搜索到各种各样的post以后,做到心中有数,也不会不清不楚了。老的查询和使用方法,在新的表中仍然可以用,只要注意对应的表名和表字段即可。

如下篇是对老的sysobjects介绍:

https://www.cnblogs.com/atree/p/sql-server-sysobjects.html

如下篇,是个答问,介绍了sys.objects(object_id, type)和sysobjects(id,xtype)的关系:

https://dba.stackexchange.com/questions/193505/making-sense-of-sys-objects-sys-system-objects-and-sys-sysobjects

  

以下就是使用系统表的方法posts,请在新的表中使用,并注意用对字段。

各种判断:

https://www.cnblogs.com/gossip/archive/2011/04/10/2011489.html

https://blog.csdn.net/smartsmile2012/article/details/78529510

更好的方法:

https://stackoverflow.com/questions/5952006/check-if-table-exists-and-if-it-doesnt-exist-create-it-in-sql-server-2008

查看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='表名'

原文地址:https://www.cnblogs.com/dusf/p/12306185.html