【问题标题】: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]
        --
        ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-11
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多