检查SQL Server中是否存在表

我但愿这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 数据库

当您用Google搜索答案时,会获得不少不一样的答案。 有官方/向后和向前兼容的方式吗? 架构

这是两种可能的方法。 两种方法中的哪种是标准/最佳方法? 编辑器

第一种方式: spa

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

第二种方式: code

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL提供的简单 io

SHOW TABLES LIKE '%tablename%';

声明。 我正在寻找相似的东西。 table


#1楼

考虑在一个数据库中您有一个表t1。 您想在其余数据库上运行脚本,例如-若是t1存在,则不执行其余任何操做来建立t1。 为此,请打开Visual Studio,而后执行如下操做: object

右键单击t1,而后单击“脚本表”,而后单击“ DROP”和“建立到”,而后单击“新建查询编辑器”。 搜索

您将找到所需的查询。 可是在执行该脚本以前,不要忘了在查询中注释掉drop语句,由于若是已有一个,则不想建立新的语句。 方法

谢谢


#2楼

若是您须要在其余数据库上工做:

DECLARE @Catalog VARCHAR(255)
SET @Catalog = 'MyDatabase'

DECLARE @Schema VARCHAR(255)
SET @Schema = 'dbo'

DECLARE @Table VARCHAR(255)
SET @Table = 'MyTable'

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES   
    WHERE TABLE_CATALOG = @Catalog 
      AND TABLE_SCHEMA = @Schema 
      AND TABLE_NAME = @Table))
BEGIN
   --do stuff
END

#3楼

使用信息架构是SQL标准的实现方式,所以,支持它的全部数据库都应使用它。


#4楼

只要我记得咱们一直使用OBJECT_ID样式

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL

#5楼

对于此类查询,最好始终使用INFORMATION_SCHEMA视图。 这些视图(大多数状况下)是跨许多不一样数据库的标准视图,而且不多因版本而异。

要检查表是否存在,请使用:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END