วิธีใช้ DROP IF มีอยู่ใน SQL Server

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

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

ดำเนินการแบบสอบถามต่อไปนี้

วางตาราง dbo.company

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

ไวยากรณ์

“DROP object_type [ หากมี ] object_name”

ข้อโต้แย้ง

OBJECT_TYPE:

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

หากมีอยู่:

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

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

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

ตอนนี้เราจะสร้างตารางที่จะดรอปโดยรันโค้ดต่อไปนี้

ใช้ [appuals] ไปที่ CREATE TABLE temp ( id INT ชื่อ varchar(100) ); ไป

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

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

ใช้ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO สร้างขั้นตอน [dbo].[sp_temp] AS BEGIN SET NOCOUNT ON; เลือก * จาก dbo.temp; END

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

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

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

วางตารางถ้ามีอยู่

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

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

ถ้า(OBJECT_ID('dbo.temp') ไม่ใช่ค่าว่าง) วางตารางชั่วคราว

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

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

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

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

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

หากมีอยู่ (เลือก 1 จาก sys.procedures โดยที่ชื่อ = 'sp_temp') ให้ดำเนินการ DROP dbo.sp_temp

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

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

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

ถ้า DB_ID('appuals') ไม่ใช่ NULL ให้เริ่ม DROP DATABASE appuals END

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

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

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

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

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

วางตารางถ้ามี dbo.temp

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

ขั้นตอนการวางถ้ามี:

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

ยกเลิกขั้นตอนหากมี dbo.sp_temp

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

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

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

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

ใช้ MASTER GO DROP DATABASE ถ้ามีอยู่แล้ว

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

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

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

Facebook Twitter Google Plus Pinterest