表名为Scores。

执行以下操作是否正确?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

当前回答

ANSI SQL/跨平台方法是使用INFORMATION_SCHEMA,它专门用于查询SQL数据库中对象的元数据。

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
    drop table dbo.Scores;

大多数现代RDBMS服务器至少提供基本的INFORMATION_SCHEMA支持,包括:MySQL、Postgres、Oracle、IBM DB2和Microsoft SQL Server 7.0(及更高版本)。

其他回答

从SQL Server 2016,您可以使用

DROP TABLE IF EXISTS dbo.Scores

参考:DROP IF EXISTS-SQL Server 2016中的新事物

它将很快出现在SQL Azure数据库中。

SQL Server 2016及以上版本最好、最简单的版本是删除表(如果存在)[表名称]

Ex:

DROP TABLE IF EXISTS dbo.Scores

如果假设上面的方法不起作用,那么可以使用下面的方法

IF OBJECT_ID('dbo.Scores', 'u') IS NOT NULL 
DROP TABLE dbo.Scores;

在SQL Server 2016(13.x)及更高版本中

DROP TABLE IF EXISTS dbo.Scores

在早期版本中

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
DROP TABLE dbo.Scores; 

U是您的桌子类型

看过很多不太管用的。创建临时表时,必须将其从tempdb中删除!

唯一有效的代码是:

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO