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

这里有两种可能的方法。哪一种是做这件事的标准/最佳方式?

第一个方法:

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;

第二种方式:

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

MySQL提供简单的

SHOW TABLES LIKE '%tablename%'; 

声明。我在找类似的东西。


当前回答

我认为下面的查询是可行的:

IF EXISTS (select * from sys.tables 
WHERE name='mytablename' )
BEGIN
     print 'table exists in the database'
END

其他回答

我知道这是一个老问题,但如果你计划经常打电话,我发现这种可能性。

create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go

在不同的数据库中查找表:

if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

对于那些还没有找到解决方案的人来说,有一些重要的事情需要知道: SQL server = MYSQL。 如果你想用MYSQL来做,这很简单

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

把这个贴在这里,因为它是谷歌的热门。

如果你需要使用不同的数据库:

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

请参阅以下方法,

方法1:使用INFORMATION_SCHEMA。表视图

我们可以像下面这样编写一个查询来检查当前数据库中是否存在Customers Table。

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')
BEGIN
    PRINT 'Table Exists'
END

方法2:使用OBJECT_ID()函数

我们可以像下面这样使用OBJECT_ID()函数来检查当前数据库中是否存在customer Table。

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULL
BEGIN
    PRINT 'Table Exists'
END

方法3:使用sys。对象目录视图

我们可以用Sys。查看对象目录,检查Table是否存在,如下所示:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE  Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')
BEGIN
   PRINT 'Table Exists'
END

方法4:使用sys。表目录视图

我们可以用Sys。查看表目录,检查表是否存在,如下图所示:

 IF EXISTS(SELECT 1 FROM sys.Tables WHERE  Name = N'Customers' AND Type = N'U')
 BEGIN
      PRINT 'Table Exists'
 END

方法5:避免使用sys. exe。sysobjects系统表

我们应该避免使用sys。直接访问sysobjects系统表,在将来的Sql Server版本中将不支持直接访问。根据微软BOL链接,微软建议使用目录视图sys.objects/sys. js。而不是sys. Tables。Sysobjects系统表直接。

  IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')
  BEGIN
     PRINT 'Table Exists'
  END

参考来源:http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/