บทความนี้กล่าวถึงไฟล์ “ ปล่อยหากมีชีวิต” คำสั่งที่มีอยู่ใน 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 นาที