表名为Scores。
执行以下操作是否正确?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
表名为Scores。
执行以下操作是否正确?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
当前回答
我使用:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end
其他回答
我编写了一个小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]
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(及更高版本)。
简单的是:
IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
其中dbo.TableName是所需的表,“U”是表的类型。
从SQL Server 2016,您可以使用
DROP TABLE IF EXISTS dbo.Scores
参考:DROP IF EXISTS-SQL Server 2016中的新事物
它将很快出现在SQL Azure数据库中。
执行以下操作是否正确?如果存在(选择*来自数据库分数)下降表数据分数
否。只有当表包含任何行时,才会删除该表(如果表不存在,则会引发错误)。
相反,对于永久表,可以使用
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的回答。