Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Utwórz obiektową matrycę w SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład z życia, kiedy używać OUTER / CROSS APPLY w SQL

  2. Konwertuj czas dziesiętny na godziny i minuty

  3. Jak wykonać kopię zapasową lub utworzyć nową tabelę z istniejącej tabeli SQL Server w SQL Server - SQL Server / TSQL Tutorial, część 105

  4. Przygotuj nową maszynę wirtualną dla SQL Server 2014 CTP1

  5. Jak dodać lub upuścić kolumnę z tabeli włączonej usługi CDC bez utraty danych w bazie danych programu SQL Server — samouczek programu SQL Server