如何删除表中存在的SQL Server?

表名是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.#T', 'U') IS NOT NULL DROP TABLE #T; 

对于任何人在SQL Server 2016+我会指出这个答案 – 哪一个有更好的方法。

从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服务器至less提供了基本的INFORMATION_SCHEMA支持,包括: MySQL , Postgres , Oracle , IBM DB2和Microsoft SQL Server 7.0(及更高版本) 。

见过这么多,真的没有工作。 当一个临时表被创build时,它必须从tempdb中被删除!

唯一可行的代码是:

 IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here DROP TABLE #tempdbname -- Remoeve "tempdb.dbo" 

要么:

 if exists (select * from sys.objects where name = 'Scores' and type = 'u') drop table Scores 

我写了一个小UDF,如果它的参数是一个现存表的名字,则返回1,否则返回0:

 CREATE FUNCTION [dbo].[Table_exists] ( @TableName VARCHAR(200) ) RETURNS BIT AS BEGIN If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName) RETURN 1; RETURN 0; END GO 

要删除表格User如果它存在,就像这样调用它:

 IF [dbo].[Table_exists]('User') = 1 Drop table [User] 

我希望这有帮助:

 begin try drop table #tempTable end try begin catch end catch 

简单的是:

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

其中dbo.TableName是你想要的表, 'U'是你的table type

 IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U')) DROP TABLE Scores GO 

我用:

 if exists (select * from sys.tables where name = 'tableName' and schema_id = schema_id('dbo')) begin drop table dbo.tableName end 

你也可以做到这一点

 DROP TABLE IF EXISTS dbo.Product 

这一个会降低触发器

 DROP TRIGGER IF EXISTS trProductInser 
 DROP TABLE IF EXISTS dbo.Scores 

要么

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

U是你的table type

使用这个命令,我一直在使用这个..

 IF OBJECT_ID('mytablename') IS NOT NULL BEGIN DROP TABLE mytablename END 

像这样做,这是最简单的方法。

无论你想在select列表中, qry都将是你自己的查询。

 set @qry = ' select * into TempData from (' + @qry + ')Tmp ' exec (@qry) select * from TempData drop table TempData