我希望这是关于如何使用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%'; 

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


当前回答

假设在一个数据库中有一个表t1。你想在其他数据库上运行脚本,比如-如果t1存在,那么什么都不做,创建t1。 要做到这个开放的视觉工作室,要做到以下几点:

右键单击t1,然后Script table as,然后DROP和Create To,然后新建查询编辑器

您将找到所需的查询。但是在执行该脚本之前,不要忘记注释掉查询中的drop语句,因为如果已经有一个drop语句,则您不想创建新的drop语句。

谢谢

其他回答

请参阅以下方法,

方法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/

如果有人试图在linq to sql(或特别是linqpad)中做同样的事情,打开选项,包括系统表和视图,并执行以下代码:

let oSchema = sys.Schemas.FirstOrDefault(s=>s.Name==a.schema )
where oSchema !=null
let o=oSchema!=null?sys.Objects.FirstOrDefault (o => o.Name==a.item && o.Schema_id==oSchema.Schema_id):null
where o!=null

假设您有一个对象,其名称在名为item的属性中,而模式在名为schema的属性中,其中源变量名为a

运行这个查询来检查数据库中是否存在这个表:

IF(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'YourTableName') IS NOT NULL
PRINT 'Table Exists';

你可以用这个:

     IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
        BEGIN 
            print 'deleted table';
            drop table t 
        END
     else 
        begin 
            print 'table not found' 
        end

 Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
 insert into t( name, lastname) values('john','doe');
 insert into t( name, lastname) values('rose',NULL);

 Select * from t
1   john    doe
2   rose    NULL

 -- clean
 drop table t

还有一个选项可以检查表是否跨数据库存在

IF EXISTS(SELECT 1 FROM [change-to-your-database].SYS.TABLES WHERE NAME = 'change-to-your-table-name')
BEGIN
    -- do whatever you want
END