赞
踩
表名是Scores
。
执行以下操作是否正确?
- IF EXISTS(SELECT *
- FROM dbo.Scores)
- DROP TABLE dbo.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
这样做,这是最简单的方法。
qry
将是您自己的查询,无论您在选择列表中想要什么。
- set @qry = ' select * into TempData from (' + @qry + ')Tmp '
-
- exec (@qry)
-
- select * from TempData
-
- drop table TempData
- 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'是你的table
type
。
在SQL Server 2016(13.x)及更高版本中
DROP TABLE IF EXISTS dbo.Scores
在早期版本中
- IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
- DROP TABLE dbo.Scores;
你是你的table type
一个更好的视觉和简单方法,如果您使用Visual Studio,只需从菜单栏打开,
查看 - > SQL Server对象资源管理器
它应该如此处所示打开
选择并右键单击要删除的表,然后删除。 应该显示这样的屏幕。 单击更新数据库以确认。
此方法非常安全,因为它为您提供反馈,并将警告已删除表与其他表的任何关系。
执行以下操作是否正确?
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+有一种更好的方法,使用DROP TABLE IF EXISTS …
请参阅@Jovan的答案 。
要么:
- if exists (select * from sys.objects where name = 'Scores' and type = 'u')
- drop table Scores
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。