How to drop a table if it exists in SQL Server?
表名是
执行以下操作是否正确?
1 2 3 | IF EXISTS(SELECT * FROM dbo.Scores) DROP TABLE dbo.Scores |
Is it correct to do the following?
1
2
3 IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
不会。只有在包含任何行时才会删除表(如果表不存在则会引发错误)。
相反,对于永久表,您可以使用
1 2 | IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL DROP TABLE dbo.Scores; |
或者,对于临时表,您可以使用
1 2 | IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL DROP TABLE #T; |
使用
从SQL Server 2016,您可以使用
1 | DROP TABLE IF EXISTS dbo.Scores |
参考:DROP IF EXISTS - SQL Server 2016中的新功能
它将很快出现在SQL Azure数据库中。
ANSI SQL /跨平台方式是使用INFORMATION_SCHEMA,它专门用于查询有关SQL数据库中对象的元数据。
1 2 | 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(及更高版本)。
看过很多不能真正发挥作用的人。
创建临时表时,必须从tempdb中删除它!
唯一有效的代码是:
1 2 | IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here DROP TABLE #tempdbname -- Remoeve"tempdb.dbo" |
我希望这有帮助:
1 2 | BEGIN try DROP TABLE #tempTable END try BEGIN catch END catch |
要么:
1 2 | IF EXISTS (SELECT * FROM sys.objects WHERE name = 'Scores' AND TYPE = 'u') DROP TABLE Scores |
我写了一个小UDF,如果它的参数是现存表的名称,则返回1,否则返回0:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
要删除表
1 | IF [dbo].[Table_exists]('User') = 1 DROP TABLE [USER] |
在SQL Server 2016(13.x)及更高版本中
1 | DROP TABLE IF EXISTS dbo.Scores |
在早期版本中
1 2 | IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL DROP TABLE dbo.Scores; |
你是你的
简单的是:
1 2 | IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL DROP TABLE dbo.TableName |
其中
1 2 3 | IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE IN (N'U')) DROP TABLE Scores GO |
我用:
1 2 3 4 5 6 7 | IF EXISTS (SELECT * FROM sys.tables WHERE name = 'tableName' AND schema_id = schema_id('dbo')) BEGIN DROP TABLE dbo.tableName END |
一个更好的视觉和简单方法,如果您使用Visual Studio,只需从菜单栏打开,
View -> SQL Server Object Explorer
它应该如此处所示打开
选择并右键单击要删除的表,然后删除。应该显示这样的屏幕。单击更新数据库以确认。
此方法非常安全,因为它为您提供反馈,并将警告已删除表与其他表的任何关系。
这样做,这是最简单的方法。
1 2 3 4 5 6 7 | SET @qry = ' select * into TempData from (' + @qry + ')Tmp ' EXEC (@qry) SELECT * FROM TempData DROP TABLE TempData |