【问题标题】:DROP TABLE IF EXISTS not working on Azure SQL Data WarehouseDROP TABLE IF EXISTS 不适用于 Azure SQL 数据仓库
【发布时间】:2018-07-24 10:29:18
【问题描述】:
我使用 SQL Server 管理工作室针对 Azure 数据仓库生成脚本。我选择了版本 Azure 数据仓库,它会在脚本下方生成以删除表(如果存在)并创建表。但是,该脚本无法通过验证。请参阅下面的错误消息。
DROP TABLE IF EXISTS Table1
GO
错误信息:
第 2 行第 12 列解析错误:“IF”附近的语法不正确。
【问题讨论】:
标签:
azure-sql-database
azure-sqldw
azure-sql-data-warehouse
azure-synapse
【解决方案1】:
如documentation 所示,Azure SQL 数据仓库目前不支持DROP TABLE IF EXISTS,截至目前:
-- Syntax for SQL Server and Azure SQL Database
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ]
table_name [ ,...n ]
[ ; ]
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse
DROP TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
[;]
【解决方案2】:
鲍勃的回答是正确的。我尝试添加以下内容作为评论,但没有格式化看起来很糟糕。
您可以使用以下语法作为替代:
if object_id ('dw.dim_location','U') is not null drop table dw.dim_location;
【解决方案3】:
来自Microsoft's documentation的示例:
IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL
BEGIN
DROP TABLE #stats_ddl
END
将stats_ddl 替换为您为临时表命名的任何名称。
把它变成像 Ron 的例子一样的单行代码也可以:
IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL DROP TABLE #stats_ddl;
【解决方案4】:
只是为了添加另一个选项,下面的代码应该适用于本地 SQL Server 和 Azure SQL DB,当您从 Azure Data Studio 中选择“Script as Drop”时,这是该选项:
--
--
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[your_table]') AND type in (N'U'))
DROP TABLE [dbo].[your_table]
--
;