在SSMS v.17.1中使用"DROP TABLE IF EXISTS"时出现了错误。

18

我正在使用SQL Server Management Studio v.17.1版本。理论上,查询DROP TABLE IF EXISTS可以在SQL Server 2016及以上版本中运行。

你可以在Microsoft的官方网页上查看: DROP TABLE

然而,当我尝试执行这个查询时,

DROP TABLE IF EXISTS dbo.EmpLocations;

出现了错误:

关键字“IF”附近的语法不正确。

问题出在哪里?我正在使用微软提供的特定数据库与SQL Server 2016-2017进行工作。


6
你正在使用哪个SQL Server数据库引擎?运行SELECT @@VERSION确认一下。 - marc_s
@Pரதீப் 为什么删除了你的回答?在我看来它是正确的。 - Tim Biegeleisen
2
@TimBiegeleisen - 不对,OP知道它只能在SQL SERVER 2016中工作。他/她认为引擎是SQL SERVER 2016,但他们可能正在使用低于2016的数据库引擎。正如Marc所提到的,@@VERSION将有助于理解问题。 - Pரதீப்
1
管理工具的版本并不重要。命令是由服务器执行的,因此需要的是 SQL Server 2016+ 服务器。 - Martin Smith
数据库的兼容性级别是否设置为2016年之前的旧版本? - devio
显示剩余3条评论
3个回答

19

为了向后兼容所有版本的SQL Server,请使用以下内容:

IF OBJECT_ID('dbo.emplocations') IS NOT NULL
    DROP TABLE dbo.emplocations;
GO

5
我们有很多方法来做到这一点,但通常不建议使用DROPCREATE来操作物理表,而应该使用临时表。
检查真实表的存在并删除:
IF EXISTS(SELECT 1 FROM sys.objects where name = 'myTable' AND type = 'U')
    DROP TABLE dbo.myTable

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

检查临时表的存在并删除:

IF OBJECT_ID('tempdb.dbo.#myTable', 'U') IS NOT NULL
    DROP TABLE #myTable;

8
SQL Server 2016 引入了 IF EXISTS 关键字,因此 DROP TABLE IF EXISTS ..... 是有效的 SQL Server(2016+)语法。 - marc_s
1
语法的引入是因为它有一个有效的用例——在部署脚本中删除表。使用临时表的建议与此完全无关。 - Martin Smith
感谢您的更新,该行已被删除,很抱歉我之前不知道。 - Shushil Bohara
如何使用ADO.net一次性执行删除和创建操作 - Transformer
使用SQL Server 2012,IF EXISTS(SELECT 1 FROM sys.objects where ...) 检查对我有效。但是,IF OBJECT_ID('dbo.myTable', 'U') IS NOT NULL 不起作用;我在NULL处得到了语法错误。 - Mike Finch

2
最后,这是我的错误 :(
正如其他人所说,我使用的是SQL Server Management v.17.1;然而,我还在使用SQL SERVER 2014版本。我开始安装新的SQL 2016,但只安装了SSMS17,而没有安装SQL Server 2016本身。
现在,我已经正确安装了SQL SERVER 2016版本。我可以顺利执行查询DROP TABLE IF EXISTS Sales.Orders2;
如果我进入版本(SELECT @@VERSION),我可以看到我已经正确安装:Microsoft SQL Server 2016 (SP1-GDR) (KB4019089) - 13.0.4206.0 (X64) Jul 6 2017 07:55:03 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows 10 Home 6.3 (Build 15063: ) 请记住,SQL2016的新版本引入了这种删除表格的新方法:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接