协慌网

登录 贡献 社区

如果存在的话如何删除表?

表格名称为Scores

执行以下操作是否正确?

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

答案

执行以下操作是否正确?

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

。仅当表包含任何行时,它才会删除表(如果表不存在,则会引发错误)。

相反,对于永久表,您可以使用

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

或者,对于临时表,您可以使用

IF OBJECT_ID('tempdb.dbo.#TempTableName', 'U') IS NOT NULL
  DROP TABLE #TempTableName;

SQL Server 2016 + 有一个更好的方法,使用DROP TABLE IF EXISTS … 。请参阅@Jovan 的答案

在 SQL Server 2016 中,您可以使用

DROP TABLE IF EXISTS dbo.Scores

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

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

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 支持,包括: MySQLPostgresOracleIBM DB2Microsoft SQL Server 7.0(及更高版本)