W SQL Server, jeśli spróbujesz usunąć obiekt, który nie istnieje, otrzymasz błąd. Jeśli nie chcesz otrzymywać błędu, musisz dodać dodatkowy kod, aby sprawdzić istnienie obiektu.
Przed SQL Server 2016 trzeba było dodać IF
oświadczenie, które przesłało zapytanie do odpowiednich obiektów systemowych, aby dowiedzieć się, czy obiekt istnieje.
Z SQL Server 2016 możesz teraz użyć nowej, czystszej metody, aby sprawdzić, czy obiekt istnieje. Nazwiemy to DROP IF EXISTS
(znany również jako „DIE”).
Przykład 1 – Podstawowa składnia
Składnia w rzeczywistości nie zawiera DROP IF EXISTS
ciąg tak, jak jest. Musisz wstawić typ obiektu między DROP
i IF
.
DROP TABLE IF EXISTS Customers
W tym przypadku upuszczam tabelę, więc słowo TABLE
jest wstawiony pomiędzy DROP
i IF
. Nazwa tabeli, którą chcę usunąć (w tym przypadku Klienci ) znajduje się na końcu.
Przykład 2 – Podstawowa wersja demonstracyjna
Oto przykład tworzenia bazy danych, a następnie upuszczania jej, a następnie ponownej próby upuszczenia.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Wynik:
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.
Nie pojawiają się żadne błędy, chociaż próbuję upuścić nieistniejący obiekt w trzeciej linii.
Przykład 3 – Bez JEŚLI ISTNIEJE
Tutaj znowu, ale tym razem usuwam IF EXISTS
część.
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Wynik:
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.
W tym przypadku otrzymuję błąd, ponieważ próbuje usunąć obiekt, który nie istnieje.
Przykład 4 – Kolumny i ograniczenia
Możesz także użyć DIE na kolumnach i ograniczeniach.
Na przykład możesz użyć DROP COLUMN IF EXISTS
w Twojej ALTER TABLE
oświadczenie.
Oto przykład.
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
Wynik:
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.
Przykład 5 – przed SQL Server 2016
Przed SQL Server 2016, aby przetestować istnienie obiektu, trzeba było zrobić coś takiego:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
W tym przykładzie użyto DB_ID()
bo mamy do czynienia z bazą danych. Jeśli obiekt był innego typu, może być konieczne użycie OBJECT_ID()
funkcję lub coś zupełnie innego.
Na przykład:
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
Gdy zaczniemy patrzeć na ten kod, możemy zobaczyć, dlaczego DROP IF EXISTS
jest mile widzianym dodatkiem do składni T-SQL.
Kwalifikujące się obiekty
DIE może być używany na następujących obiektach.
AGREGAT | PROCEDURA | TABELA |
MONTAŻ | ROLA | WYZWALANIE |
WIDOK | REGUŁA | TYP |
BAZA DANYCH | SCHEMAT | UŻYTKOWNIK |
DOMYŚLNE | POLITYKA BEZPIECZEŃSTWA | WIDOK |
FUNKCJA | SEKWENCJA | |
INDEKS | SYNONIM |
Jak wspomniano, DIE może być również używany na kolumnach i ograniczeniach podczas korzystania z ALTER TABLE
oświadczenie:
- ZMIEŃ KOLUMNĘ UPUSZCZANIA TABELI, JEŚLI ISTNIEJE
- ZMIEŃ OGRANICZENIE UPADKU TABELI, JEŚLI ISTNIEJE