执行以下操作是否正确?
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 支持,包括: MySQL , Postgres , Oracle , IBM DB2和Microsoft SQL Server 7.0(及更高版本) 。