วิธีใช้ 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 ถ้ามีอยู่แล้ว
ผลลัพธ์จะเป็นดังนี้
ประโยชน์ของการใช้วิธีนี้คือ หากไม่มีฐานข้อมูล จะไม่ทำให้เกิดข้อผิดพลาดใดๆ คำสั่งถัดไปในกลุ่มจะดำเนินการต่อไป มาลองวางฐานข้อมูลที่หลุดไปแล้วอีกครั้ง
ในทำนองเดียวกัน เราสามารถลบดัชนี มุมมอง ลำดับ แอสเซมบลี ฯลฯ ออกจากฐานข้อมูลได้