如何确定SQL Server 2008中的SQL Server数据库中是否存在表?


Answers:


18

如果查询sysobjects表,则查询如下

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype ='U'是一个用户表

然后可以包装这是IF EXISTS语句

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 

5
+1需要特别注意的是,自SQL Server 2005以来,Microsoft一直在将这样的功能移至动态管理视图(DMV)。从技术上讲,这是可行的,但是Microsoft现在建议为此使用sys.tables DMV。IF EXISTS(SELECT * FROM sys.tables where type ='U'AND name ='yourTableName')。从功能上讲,您的声明和我的声明完全相同。只是想提DMV。要了解有关DMV的更多信息,请查看文档msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M

马特,这真是个好电话。旧习惯很难改掉:-)你的方法更好。
Miles D

1
我不确定是否会带来很大的不同,但我赞成IF EXISTS(SELECT 1 from sys.tables ...)
David Hayes

@DavidHayes是的,我想此解决方案速度更快,因为它不查询查找列名。
Xriuk

12

这是找到它的另一种方法

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'

美观而简单,无需查询复杂的系统表。谢谢!
暗影巫师为您耳边

2
这样是否无法检测到同名的视图?也许存储过程之类的呢?
MarioDS '16

如果您限定对象的架构,则不是。
Grant Fritchey

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.