Πώς να χρησιμοποιήσετε το DROP IF EXISTS στον SQL Server;
Αυτό το άρθρο ασχολείται με το "ΠΡΟΣΤΑΤΕ ΕΑΝ ΥΠΑΡΧΕΙ" δήλωση διαθέσιμη στον SQL Server 2016 και νεότερες εκδόσεις. «ΕΑΝ ΕΞΕΤΑΣΕΙΣ» είναι η τελευταία προαιρετική ρήτρα που προστέθηκε στην υπάρχουσα δήλωση DROP στον SQL Server 2016 και σε νεότερες εκδόσεις. Ουσιαστικά, το "ΠΡΟΣΤΑΤΕ ΕΑΝ ΥΠΑΡΧΕΙ" Η επιλογή χρησιμοποιείται όταν είναι απαραίτητο να ελέγξετε εάν μια οντότητα παραμένει σε μια βάση δεδομένων πριν από τη δημιουργία ή την κατάργησή της. Σε αυτήν την περίπτωση, θα αφήσουμε πρώτα το υπάρχον αντικείμενο βάσης δεδομένων και μετά θα το δημιουργήσουμε ξανά με αλλαγές, εάν απαιτείται.
Έτσι, αποτρέπει τον παλιό τρόπο γραφής αν η συνθήκη και εντός της συνθήκης if γράφει μια δήλωση για να ελέγξει την παρουσία του αντικειμένου για να το ρίξει. Εάν δεν συμβεί, η επόμενη δήλωση της παρτίδας θα συνεχίσει να εκτελείται. Αλλά αν προσπαθήσουμε να ρίξουμε ένα αντικείμενο που δεν υπάρχει τότε θα δημιουργήσει ένα μήνυμα σφάλματος όπως φαίνεται παρακάτω.
Εκτελέστε το ακόλουθο ερώτημα.
drop table dbo.company
Η έξοδος θα είναι έτσι.
Σύνταξη
"DROP object_type [IF EXISTS] object_name"
Επιχειρήματα
OBJECT_TYPE:
Ο τύπος αντικειμένου μπορεί να είναι οποιοσδήποτε από τη βάση δεδομένων, τη σκανδάλη, τη συναρμολόγηση, την ακολουθία, τον ευρετήριο, τον πίνακα, την προβολή διαδικασίας, τη λειτουργία κ.λπ.
ΕΑΝ ΥΠΑΡΧΕΙ:
Πρόκειται για μια προαιρετική ρήτρα και αν αναφέρεται στη δήλωση DROP, θα ελέγξει την ύπαρξη του αντικειμένου, εάν υπάρχει, θα πέσει, διαφορετικά θα συνεχίσει να εκτελεί την επόμενη δήλωση στο μπλοκ χωρίς να δημιουργεί σφάλματα.
Τώρα με την εισαγωγή της νέας μεθόδου "DROP IF EXISTS" στον SQL Server 2016 οι προγραμματιστές μπορούν να γράψουν σύντομο κώδικα.
Αρχικά, δημιουργήστε μια βάση δεδομένων με το όνομα "appuals".
Τώρα, θα δημιουργήσουμε έναν πίνακα που θα πέσει εκτελώντας τον ακόλουθο κώδικα.
χρησιμοποιήστε [appuals] Go CREATE TABLE temp (id INT, name varchar (100)); ΠΗΓΑΙΝΩ
Η έξοδος θα έχει ως εξής.
Επιπλέον, δημιουργήστε μια διαδικασία αποθήκευσης που θα αποσυρθεί χρησιμοποιώντας τον ακόλουθο κώδικα.
ΧΡΗΣΗ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Δημιουργία ΔΙΑΔΙΚΑΣΙΑΣ [dbo]. [Sp_temp] AS BEGIN SET NOCOUNT ON; ΕΠΙΛΕΞΤΕ * από dbo.temp; ΤΕΛΟΣ
Η έξοδος θα είναι όπως παρακάτω.
Παλιά μέθοδος: Πριν από τον SQL Server, χρησιμοποιήστε πτώση εάν εξέρχεται σε αντικείμενα βάσης δεδομένων
Η χρήση της μεθόδου DROP IF EXISTS πριν από τον SQL Server 2016 απαιτούσε τη σύνταξη μακροχρόνιου κωδικού περιτυλίγματος IF
Αποθέστε τον πίνακα εάν υπάρχει
Η προηγούμενη μέθοδος ρίψης τραπεζιού έχει ως εξής.
Εάν χρησιμοποιούμε SQL Server 2015 ή νωρίτερα από ό, τι πρέπει να εκτελέσουμε την ακόλουθη δέσμη κώδικα.
Εάν (OBJECT_ID ('dbo.temp') δεν είναι μηδενικό) Πτώση θερμοκρασίας πίνακα
Η έξοδος θα έχει ως εξής.
Τώρα η σύνταξή του είναι αρκετά συγκεχυμένη, οπότε αν δεν σας αρέσει και χρησιμοποιείτε τον SQL Server 2016 ή παραπάνω, μπορείτε να πάτε για απλή δήλωση DROP IF EXIST αντί για μεγάλα περιτυλίγματα.
Διαδικασία πτώσης καταστήματος εάν υπάρχει:
Για να απορρίψουμε τη διαδικασία, πρέπει να γράψουμε μια δήλωση υπό όρους για να ελέγξουμε εάν υπάρχει η διαδικασία αποθήκευσης ή όχι και μετά γράψτε τη δήλωση πτώσης. Διαφορετικά, θα δημιουργήσει σφάλμα σε περίπτωση που η αποθηκευμένη διαδικασία δεν υπάρχει.
Τώρα εκτελέστε τις ακόλουθες δηλώσεις για να αποθέσετε τη διαδικασία σε εκδόσεις χαμηλότερες από τον SQL Server 2016.
ΕΑΝ ΥΠΑΡΧΕΙ (ΕΠΙΛΕΞΤΕ 1 ΑΠΟ sys.procedures ΠΟΥ ΟΝΟΜΑ = 'sp_temp') ΔΙΑΔΙΚΑΣΙΑ ΣΤΑΣΗΣ dbo.sp_temp
Η έξοδος θα είναι έτσι.
Αποθέστε τη βάση δεδομένων εάν υπάρχει:
Εάν χρησιμοποιείτε προηγούμενες εκδόσεις του SQL Server, πρέπει να εκτελέσετε τον ακόλουθο κώδικα για να αποθέσετε τη βάση δεδομένων.
ΕΑΝ το DB_ID ('appuals') ΔΕΝ ΕΙΝΑΙ NULL BEGIN DROP DATABASE appuals END
Η έξοδος θα έχει ως εξής.
Νέα μέθοδος: DROP ΕΑΝ ΥΠΑΡΧΟΥΝ υποστηρίζονται στον SQL Server 2016 και νεότερη έκδοση
Για να αποθέσετε ένα αντικείμενο βάσης δεδομένων στον SQL Server 2016 και άνω, πρέπει να εκτελέσουμε μια απλή δήλωση.
Αποθέστε τον πίνακα εάν υπάρχει:
Μπορούμε να γράψουμε μια δήλωση όπως παρακάτω στον SQL Server 2016 για να αφαιρέσουμε έναν αποθηκευμένο πίνακα εάν υπάρχει.
ΠΡΟΣΤΑΣΙΑ ΠΙΝΑΚΑΣ ΕΑΝ ΥΠΑΡΧΕΙ dbo.temp
Η έξοδος θα είναι έτσι.
Διαδικασία πτώσης εάν υπάρχει:
Τώρα θα αφήσουμε την αποθηκευμένη διαδικασία που δημιουργήσαμε στην αρχή του άρθρου εκτελώντας τον ακόλουθο κώδικα.
ΔΙΑΔΙΚΑΣΙΑ ΣΤΑΣΗΣ ΕΑΝ ΥΠΑΡΧΕΙ dbo.sp_temp
Η έξοδος θα είναι όπως παρακάτω.
Όσον αφορά τη σύνταξη, αυτή η απλή δήλωση είναι κατανοητή και εύκολο να θυμηθεί. Ομοίως, μπορούμε να ακολουθήσουμε την ίδια διαδικασία για να αποθέσουμε άλλα αντικείμενα βάσης δεδομένων.
Αποθέστε τη βάση δεδομένων εάν υπάρχει:
Εκτελέστε τον ακόλουθο κώδικα εάν θέλετε να αποθέσετε τη βάση δεδομένων χρησιμοποιώντας εάν υπάρχει έλεγχος
ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ ΒΑΣΕΙΣ ΒΑΣΕΙΣ MASTER GO DROP ΕΑΝ ΥΠΑΡΧΕΙ
Η έξοδος θα είναι όπως παρακάτω.
Το πλεονέκτημα της χρήσης αυτής της μεθόδου είναι ότι εάν η βάση δεδομένων δεν υπάρχει, δεν θα προκαλέσει κανένα σφάλμα, η επόμενη δήλωση στη δέσμη θα συνεχίσει να εκτελείται. Ας προσπαθήσουμε να αποθέσουμε ξανά την ήδη αποσυρμένη βάση δεδομένων
Ομοίως, μπορούμε να αποθέσουμε ευρετήρια, προβολές, ακολουθίες, συγκροτήματα κ.λπ. από τη βάση δεδομένων.