วิธีใช้ DROP IF EXISTS ใน SQL Server



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

บทความนี้กล่าวถึงไฟล์ “ ปล่อยหากมีชีวิต” คำสั่งที่มีอยู่ใน SQL Server 2016 และเวอร์ชันที่ใหม่กว่า “ หากออก” เป็นคำสั่งทางเลือกล่าสุดที่เพิ่มในคำสั่ง DROP ที่มีอยู่ใน SQL Server 2016 และเวอร์ชันที่ใหม่กว่า โดยพื้นฐานแล้ว “ ปล่อยหากมีชีวิต” ตัวเลือกถูกใช้เมื่อจำเป็นต้องตรวจสอบว่าเอนทิตียังคงอยู่ในฐานข้อมูลก่อนที่จะสร้างหรือทิ้ง ในกรณีนี้เราจะทิ้งวัตถุฐานข้อมูลที่มีอยู่ก่อนแล้วจึงสร้างใหม่พร้อมกับการเปลี่ยนแปลงหากจำเป็น



ดังนั้นจึงป้องกันวิธีการเขียน if แบบเก่าและภายในเงื่อนไข if ที่เขียนคำสั่งเพื่อทดสอบการมีอยู่ของวัตถุที่จะทิ้งมัน หากไม่เกิดขึ้นคำสั่งถัดไปในชุดงานจะยังคงดำเนินการต่อไป แต่ถ้าเราพยายามวางวัตถุที่ไม่มีอยู่จริงมันจะขึ้นข้อความแสดงข้อผิดพลาดดังที่แสดงด้านล่าง



ดำเนินการค้นหาต่อไปนี้



วางตาราง dbo.company

ผลลัพธ์จะเป็นแบบนี้

ข้อผิดพลาดเกิดขึ้นขณะทิ้งวัตถุฐานข้อมูลที่ไม่มีอยู่

ไวยากรณ์

“ DROP object_type [IF EXISTS] object_name”

อาร์กิวเมนต์

OBJECT_TYPE:



ประเภทวัตถุสามารถเป็นใครก็ได้จากฐานข้อมูลทริกเกอร์แอสเซมบลีลำดับดัชนีตารางมุมมองขั้นตอนฟังก์ชัน ฯลฯ

หากมีอยู่:

มันเป็นประโยคที่เป็นทางเลือกและหากมีการกล่าวถึงในคำสั่ง DROP มันจะตรวจสอบการมีอยู่ของวัตถุหากมีอยู่มันจะลดลงมิฉะนั้นจะดำเนินการคำสั่งถัดไปในบล็อกต่อไปโดยไม่มีข้อผิดพลาดใด ๆ

ขณะนี้มีการแนะนำวิธีการใหม่“ DROP IF EXISTS” ใน SQL Server 2016 นักพัฒนาสามารถเขียนโค้ดสั้น ๆ

ขั้นแรกสร้างฐานข้อมูลชื่อ“ appuals”

การสร้างฐานข้อมูล

ตอนนี้เราจะสร้างตารางที่จะทิ้งโดยเรียกใช้รหัสต่อไปนี้

ใช้ [appuals] ไปสร้างอุณหภูมิตาราง (id INT ชื่อ varchar (100)); ไป

ผลลัพธ์จะเป็นดังนี้

การสร้างตาราง

นอกจากนี้ให้สร้างขั้นตอนการจัดเก็บที่จะทิ้งโดยใช้รหัสต่อไปนี้

ใช้ [appuals] ไปตั้งค่า ANSI_NULLS ต่อไปตั้ง QUOTED_IDENTIFIER ต่อไปสร้างกระบวนการ [dbo] [sp_temp] เป็นเริ่มตั้งค่า NOCOUNT บน; เลือก * จาก dbo.temp; สิ้นสุด

ผลลัพธ์จะเป็นดังนี้

การสร้างขั้นตอนการจัดเก็บ

วิธีการเก่า: ก่อนหน้า SQL Server โดยใช้ drop ถ้าออกจากวัตถุฐานข้อมูล

การใช้เมธอด DROP IF EXISTS ก่อน SQL Server 2016 จำเป็นต้องเขียนโค้ดตัดคำสั่ง IF ที่มีความยาว

วางตารางถ้ามี

วิธีการวางตารางก่อนหน้ามีดังนี้

หากเราใช้ SQL Server 2015 หรือเก่ากว่าเราจำเป็นต้องรันโค้ดต่อไปนี้

ถ้า (OBJECT_ID ('dbo.temp') ไม่ใช่ Null) วางอุณหภูมิตาราง

ผลลัพธ์จะเป็นดังนี้

ล้มโต๊ะ

ตอนนี้ไวยากรณ์ของมันค่อนข้างสับสนดังนั้นหากคุณไม่ชอบและคุณกำลังใช้ SQL Server 2016 ขึ้นไปคุณสามารถใช้คำสั่ง DROP IF EXIST แบบธรรมดาแทนการห่อใหญ่

วางขั้นตอนการจัดเก็บหากมี:

ในการวางขั้นตอนเราต้องเขียนคำสั่งเงื่อนไขเพื่อตรวจสอบว่ามีขั้นตอนการจัดเก็บหรือไม่จากนั้นจึงเขียนคำสั่งดร็อป มิฉะนั้นจะเพิ่มข้อผิดพลาดในกรณีที่ไม่มีกระบวนงานที่จัดเก็บไว้

ตอนนี้ดำเนินการคำสั่งต่อไปนี้เพื่อวางขั้นตอนในเวอร์ชันที่ต่ำกว่า SQL Server 2016

IF EXISTS (เลือก 1 จาก sys.procedures WHERE Name = 'sp_temp') DROP PROCEDURE dbo.sp_temp

ผลลัพธ์จะเป็นแบบนี้

วางขั้นตอนโดยใช้วิธีการเดิมของ if wrapper code

วางฐานข้อมูลถ้ามี:

หากคุณกำลังใช้ SQL Server เวอร์ชันก่อนหน้าคุณจำเป็นต้องรันโค้ดต่อไปนี้เพื่อวางฐานข้อมูล

ถ้า DB_ID ('appuals') ไม่เป็นโมฆะเริ่มต้นปล่อยฐานข้อมูล appuals END

ผลลัพธ์จะเป็นดังนี้

วางฐานข้อมูลโดยใช้วิธีการเก่า

วิธีการใหม่: DROP IF EXISTS ที่รองรับใน SQL Server 2016 และเวอร์ชันที่สูงกว่า

ในการวางวัตถุฐานข้อมูลใน SQL Server 2016 ขึ้นไปเราจำเป็นต้องดำเนินการคำสั่งง่ายๆ

วางตารางถ้ามี:

เราสามารถเขียนคำสั่งดังต่อไปนี้ใน SQL Server 2016 เพื่อลบตารางที่เก็บไว้หากมีอยู่

วางตารางหากมี dbo.temp

ผลลัพธ์จะเป็นแบบนี้

วางตารางโดยใช้วิธีการใหม่

วางขั้นตอนหากมีอยู่:

ตอนนี้เราจะทิ้งขั้นตอนการจัดเก็บที่เราสร้างไว้ที่จุดเริ่มต้นของบทความโดยเรียกใช้รหัสต่อไปนี้

วางขั้นตอนหากมี dbo.sp_temp

ผลลัพธ์จะเป็นดังนี้

วางตารางโดยใช้วิธีการใหม่

เท่าที่เกี่ยวข้องกับไวยากรณ์คำสั่งง่ายๆนี้เข้าใจง่ายและจำง่าย ในทำนองเดียวกันเราสามารถทำตามขั้นตอนเดียวกันเพื่อวางวัตถุฐานข้อมูลอื่น ๆ

วางฐานข้อมูลถ้ามี:

รันโค้ดต่อไปนี้หากคุณต้องการวางฐานข้อมูลโดยใช้การตรวจสอบว่ามีอยู่

ใช้ MASTER GO DROP DATABASE หากมีอยู่จริง

ผลลัพธ์จะเป็นดังนี้

วางฐานข้อมูลโดยใช้วิธีการใหม่

ประโยชน์ของการใช้วิธีนี้คือถ้าไม่มีฐานข้อมูลก็จะไม่ก่อให้เกิดข้อผิดพลาดใด ๆ คำสั่งถัดไปในชุดงานจะยังคงดำเนินการต่อไป ลองปล่อยฐานข้อมูลที่ตกหล่นไปแล้วอีกครั้ง

ข้อผิดพลาดเกิดขึ้นในขณะที่ทิ้งฐานข้อมูลที่ตกหล่นไปแล้วอีกครั้ง

ในทำนองเดียวกันเราสามารถดร็อปดัชนีมุมมองลำดับแอสเซมบลี ฯลฯ จากฐานข้อมูล

อ่าน 3 นาที