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