Программирование

Как использовать DROP IF EXISTS в SQL Server?

Содержание:

В этой статье рассматривается “DROP IF EXISTS” заявление, доступное в SQL Server 2016 и более поздних версиях.  “IF EXITS” это последний необязательный пункт, добавленный в существующий оператор DROP в SQL Server 2016 и более поздних версиях. По сути, команда “DROP IF EXISTS” опция используется, когда необходимо проверить, остается ли сущность в базе данных, прежде чем она будет создана или удалена. В данном случае мы сначала удалим существующий объект базы данных, а затем воссоздадим его с изменениями, если потребуется.

Таким образом, это предотвращает старый способ написания условия if и внутри условия if написания оператора для проверки наличия объекта, чтобы отбросить его. Если этого не происходит, то следующий оператор в пакете продолжает выполняться. Но если мы попытаемся бросить несуществующий объект, то будет выдано сообщение об ошибке, как показано ниже.

Выполните следующий запрос.

отбросить таблицу dbo.компания

Вывод будет выглядеть следующим образом.

Ошибка возникает при сбросе несуществующего объекта базы данных

Синтаксис

"DROP object_type [ IF EXISTS ] object_name"

Аргументы

OBJECT_TYPE:

Тип объекта может быть любым из базы данных, триггера, сборки, последовательности, индекса, таблицы, представления процедуры, функции и т. д.

IF EXISTS:

Это необязательный пункт, и если он упоминается в операторе DROP, то проверяется существование объекта, если он существует, то он будет удален, в противном случае он продолжит выполнение следующего оператора в блоке, не выдавая никаких ошибок.

Теперь с введением нового метода «DROP IF EXISTS» в SQL Server 2016 разработчики могут писать короткий код.

Сначала создайте базу данных с именем “appuals».

Создание базы данных

Теперь мы создадим таблицу, которая будет удалена, выполнив следующий код.

use [appuals]
Перейти
CREATE TABLE temp
(
id INT,
имя varchar(100)
);
GO

Выходные данные будут выглядеть следующим образом.

Создание таблицы

Далее, создайте хранимую процедуру, которую нужно удалить, используя следующий код.

USE [appuals]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROCEDURE [dbo].[sp_temp]
AS
BEGIN
УСТАНОВИТЬ NOCOUNT ON;
SELECT * from dbo.temp;
END

Результат будет выглядеть следующим образом.

Создание хранимой процедуры

Старый метод: До SQL Server использовал drop if exits для объектов базы данных

Использование метода DROP IF EXISTS до SQL Server 2016 требовало написания длинного кода-обертки оператора IF.

Убрать таблицу, если она существует

Предыдущий метод удаления таблицы выглядит следующим образом.

Если мы используем SQL Server 2015 или более ранние версии, то нам нужно выполнить следующий набор кода.

If(OBJECT_ID('dbo.temp') Is Not Null)
Удалить таблицу temp

Вывод будет выглядеть следующим образом.

Удаление таблицы

Теперь его синтаксис довольно запутанный, поэтому если вам он не нравится и вы используете SQL Server 2016 или выше, вы можете использовать простой оператор DROP IF EXIST вместо больших оберток.

Удаление хранимой процедуры, если она существует:

Чтобы удалить процедуру, мы должны написать условный оператор, чтобы проверить, существует ли хранимая процедура или нет, а затем написать оператор drop. В противном случае будет выдана ошибка, если хранимая процедура не существует.

Теперь выполните следующие операторы для удаления процедуры в версиях ниже SQL Server 2016.

IF EXISTS(SELECT 1 FROM sys.процедуры WHERE Name = 'sp_temp')
DROP PROCEDURE dbo.sp_temp

Вывод будет выглядеть следующим образом.

Удаление процедуры с помощью старого метода кода if wrapper

Удалите базу данных, если она существует:

Если вы используете предыдущие версии SQL Server, вам необходимо выполнить следующий код для удаления базы данных.

IF DB_ID('appuals') IS NOT NULL
BEGIN
DROP DATABASE appuals
END

Вывод будет выглядеть следующим образом.

Удаление базы данных с помощью старого метода

Новый метод: DROP IF EXISTS, поддерживаемый в SQL Server 2016 и выше

Чтобы сбросить объект базы данных в SQL Server 2016 и выше, нам нужно выполнить простой оператор.

Уничтожить таблицу, если она существует:

В SQL Server 2016 мы можем написать следующее утверждение, чтобы удалить хранимую таблицу, если она существует.

DROP TABLE IF EXISTS dbo.temp

Результат будет выглядеть следующим образом.

Удаление таблицы с помощью нового метода

Удалите процедуру, если она существует:

Теперь мы удалим хранимую процедуру, которую мы создали в начале статьи, выполнив следующий код.

DROP PROCEDURE IF EXISTS dbo.sp_temp

Вывод будет выглядеть следующим образом.

Удаление таблицы с помощью нового метода

Что касается синтаксиса, то этот простой оператор легко понять и легко запомнить. Аналогично, мы можем выполнить ту же процедуру для удаления других объектов базы данных.

Удалить базу данных, если она существует:

Выполните следующий код, если вы хотите сбросить базу данных с помощью проверки if exists

USE MASTER
GO
DROP DATABASE IF EXISTS appuals

Вывод будет выглядеть следующим образом.

Удалите базу данных с помощью нового метода

Преимущество использования этого метода заключается в том, что если база данных не существует, это не вызовет никакой ошибки, следующий оператор в пакете продолжит выполняться. Давайте’попробуем повторно закинуть уже закинутую базу данных.

Ошибка возникает при повторном удалении уже удаленной базы данных.

Аналогично мы можем отбрасывать индексы, представления, последовательности, сборки и т.д. из базы данных.

Добавить комментарий