Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Направете обектен DIE в SQL Server

В SQL Server, ако се опитате да пуснете обект, който не съществува, ще получите грешка. Ако не искате да получите грешка, ще трябва да добавите допълнителен код, за да проверите за съществуването на обекта.

Преди SQL Server 2016 трябваше да добавите IF оператор, който е поискал съответните системни обекти, за да разбере дали обектът съществува или не.

От SQL Server 2016 вече можете да използвате нов, по-чист метод, за да проверите дали даден обект съществува. Ще го наречем DROP IF EXISTS (известен по друг начин като „DIE“).

Пример 1 – Основен синтаксис

Синтаксисът всъщност не съдържа DROP IF EXISTS низ такъв, какъвто е. Това, което трябва да направите, е да вмъкнете типа обект между DROP и IF .

DROP TABLE IF EXISTS Customers

В този случай пускам таблица, така че думата TABLE се вмъква между DROP и IF . Името на таблицата, която искам да пусна (в този случай Клиенти ) се поставя в края.

Пример 2 – Основна демонстрация

Ето пример за създаване на база данни, след което я изпускате и след това се опитвате да я изхвърлите отново.

CREATE DATABASE Homer;
GO
DROP DATABASE IF EXISTS Homer;
GO
DROP DATABASE IF EXISTS Homer;
GO

Резултат:

Started executing query at Line 17
Commands completed successfully.

Started executing query at Line 19
Commands completed successfully.

Started executing query at Line 21
Commands completed successfully.

Не се появяват грешки, въпреки че се опитвам да пусна несъществуващ обект на третия ред.

Пример 3 – Без IF EXISTS

Ето го отново, освен че този път премахвам IF EXISTS част.

CREATE DATABASE Homer;
GO
DROP DATABASE Homer;
GO
DROP DATABASE Homer;
GO

Резултат:

Started executing query at Line 17
Commands completed successfully.

Started executing query at Line 19
Commands completed successfully.

Started executing query at Line 21
Msg 3701, Level 11, State 1, Line 5
Cannot drop the database 'Homer', because it does not exist or you do not have permission.

В този случай получавам грешка, защото се опитва да пусне обект, който не съществува.

Пример 4 – Колони и ограничения

Можете също да използвате DIE за колони и ограничения.

Например, можете да използвате DROP COLUMN IF EXISTS във вашата ALTER TABLE изявление.

Ето един пример.

DROP TABLE IF EXISTS DieTest;
GO

CREATE TABLE DieTest
(
    DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(),
    DieTestName varchar(70), 
    InsertDate datetime2(7) NOT NULL DEFAULT GETDATE()
);
GO

ALTER TABLE DieTest
DROP COLUMN IF EXISTS DieTestName;
GO

ALTER TABLE DieTest
DROP COLUMN IF EXISTS DieTestName;
GO

Резултат:

Started executing query at Line 1
Commands completed successfully.

Started executing query at Line 3
Commands completed successfully.

Started executing query at Line 11
Commands completed successfully.

Started executing query at Line 15
Commands completed successfully.

Пример 5 – Преди SQL Server 2016

Преди SQL Server 2016, за да тествате съществуването на обект, трябва да направите нещо подобно:

IF DB_ID('Homer') IS NOT NULL
DROP DATABASE Homer;

Този пример използва DB_ID() защото имаме работа с база данни. Ако обектът е от различен тип, може да се наложи да използвате OBJECT_ID() функция или нещо съвсем друго.

Например:

IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL
DROP TABLE dbo.Customers;
 
IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger')
DROP TRIGGER MyTrigger

След като започнем да разглеждаме този код, можем да видим защо DROP IF EXISTS е добре дошло допълнение към синтаксиса на T-SQL.

Допустими обекти

DIE може да се използва за следните обекти.

АГРЕГАТ

ПРОЦЕДУРА

ТАБЛИЦА

МОНТАЖ

РОЛЯ

ПУСК

ПРЕГЛЕД

ПРАВИЛО

ТИП

БАЗА ДАННИ

СХЕМА

ПОТРЕБИТЕЛ

ПО ПОДРАЗБИРАНЕ

ПОЛИТИКА ЗА СИГУРНОСТ

ПРЕГЛЕД

ФУНКЦИЯ

ПОСЛЕДОВАТЕЛНОСТ

ИНДЕКС

СИНОНИМ

Както споменахме, DIE може да се използва и върху колони и ограничения, когато се използва ALTER TABLE изявление:

  • ПРОМЕНИ КОЛОНАТА ИЗПУСКАНЕ НА ТАБЛИЦА АКО СЪЩЕСТВУВА
  • ПРОМЕНИ ОГРАНИЧЕНИЕТО ЗА ОТПУСКАНЕ НА ТАБЛИЦА АКО СЪЩЕСТВУВА

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime2 срещу smalldatetime в SQL Server:Каква е разликата?

  2. Вземете текущия идентификатор за влизане в SQL Server (T-SQL)

  3. CEILING() Примери в SQL Server

  4. Промяна на функция с таблично значение в SQL Server

  5. SQL Server BIT Datatype – Крайно ръководство