DROP TABLE, если EXISTS не работает в хранилище данных SQL Azure

Я использовал среду управления SQL Server для создания сценария для хранилища данных Azure. Я выбрал Edition Azure Data Warehouse, он генерирует под сценарием удаление таблицы, если она существует, и создание таблицы. Однако сценарий не может пройти проверку. Пожалуйста, смотрите ниже сообщение об ошибке.

DROP TABLE IF EXISTS Table1
GO

Сообщение об ошибке:

Ошибка разбора в строке: 2, столбец: 12: неправильный синтаксис рядом с "IF".

4 ответа

Как указано в документации, DROP TABLE IF EXISTS в настоящее время не поддерживается в хранилище данных SQL Azure, как на сегодняшний день:

-- 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   
[;] 

Боб ответ правильный. Я попытался добавить следующее как комментарий, но это выглядело ужасно без форматирования.

Вы можете использовать следующий синтаксис в качестве альтернативы:

if object_id ('dw.dim_location','U') is not null drop table dw.dim_location;

Пример из документации Microsoft:

IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL
BEGIN
    DROP TABLE #stats_ddl
END

Заменить stats_ddl с тем, что вы назвали своей временной таблицей.

Превращение этого в однострочник, как в примере Рона, тоже работает:

IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL DROP TABLE #stats_ddl;

Чтобы добавить еще один вариант, приведенный ниже код должен работать и для локального SQL Server, и для базы данных SQL Azure. Это вариант, когда вы выбираете «Сценарий как удаление» из Azure Data Studio:

      --
--
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]
--
;
Другие вопросы по тегам