表名为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的回答。


Or:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table 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(及更高版本)。


我编写了一个小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]

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

唯一有效的代码是:

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

我希望这有助于:

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

从SQL Server 2016,您可以使用

DROP TABLE IF EXISTS dbo.Scores

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

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


我使用:

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

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

简单的是:

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

其中dbo.TableName是所需的表,“U”是表的类型。


在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是您的桌子类型


如果您正在使用visual Studio,只需从菜单栏打开,

查看->SQL Server对象资源管理器

它应该像这里所示那样打开

选择并右键单击要删除的表,然后删除。应显示这样的屏幕。单击更新数据库以确认。

此方法非常安全,因为它会向您提供反馈,并会警告删除的表与其他表之间的任何关系。


确保在末尾使用级联约束来自动删除依赖于表的所有对象(例如视图和投影)。

drop table if exists tableName cascade;

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

Ex:

DROP TABLE IF EXISTS dbo.Scores

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

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

如果您使用长代码,并且希望为临时表编写更少的代码,请创建以下过程:

CREATE PROCEDURE MF_DROP (@TEMP AS VARCHAR(100)) AS
    EXEC('IF OBJECT_ID(''TEMPDB.DBO.' + @TEMP + ''', ''U'') IS NOT NULL DROP TABLE ' + @TEMP)

执行中:

EXEC MF_DROP #A
CREATE TABLE #A (I INT) ....