Làm thế nào để sử dụng DROP NẾU TỒN TẠI trong SQL Server?



Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề

Bài viết này thảo luận về 'DROP NẾU TỒN TẠI' câu lệnh có sẵn trong SQL Server 2016 và các phiên bản mới hơn. 'IF EXITS' là mệnh đề tùy chọn mới nhất được thêm vào câu lệnh DROP hiện có trong SQL Server 2016 và các phiên bản mới hơn. Về cơ bản, 'DROP NẾU TỒN TẠI' tùy chọn được sử dụng khi cần kiểm tra xem một thực thể có còn trong cơ sở dữ liệu hay không trước khi nó được tạo hoặc bỏ. Trong trường hợp này, trước tiên chúng ta sẽ thả đối tượng cơ sở dữ liệu hiện có và sau đó tạo lại nó với các thay đổi nếu được yêu cầu.



Do đó, nó ngăn chặn cách viết cũ của điều kiện if và bên trong điều kiện if viết một câu lệnh để kiểm tra sự hiện diện của đối tượng để loại bỏ nó. Nếu nó không xảy ra, câu lệnh tiếp theo trong lô sẽ tiếp tục được thực hiện. Nhưng nếu chúng ta cố gắng thả một đối tượng không tồn tại thì nó sẽ xuất hiện thông báo lỗi như hình dưới đây.



Thực hiện truy vấn sau.



thả bảng dbo.company

Đầu ra sẽ như thế này.

Lỗi phát sinh khi thả đối tượng cơ sở dữ liệu không tồn tại

Cú pháp

“DROP object_type [IF EXISTS] object_name”

Tranh luận

LOẠI ĐỐI TƯỢNG:



Loại đối tượng có thể là bất kỳ ai từ cơ sở dữ liệu, trình kích hoạt, lắp ráp, trình tự, chỉ mục, bảng, dạng xem thủ tục, hàm, v.v.

NẾU TỒN TẠI:

Nó là một mệnh đề tùy chọn và nếu nó được đề cập trong câu lệnh DROP, nó sẽ kiểm tra sự tồn tại của đối tượng, nếu nó tồn tại, nó sẽ loại bỏ, nếu không nó sẽ tiếp tục thực hiện câu lệnh tiếp theo trong khối mà không tạo ra bất kỳ lỗi nào.

Giờ đây, với sự ra đời của phương pháp mới “DROP IF EXISTS” trong SQL Server 2016, các nhà phát triển có thể viết mã ngắn gọn.

Đầu tiên, tạo một cơ sở dữ liệu có tên là “appuals”.

Tạo cơ sở dữ liệu

Bây giờ, chúng ta sẽ tạo một bảng để loại bỏ bằng cách thực thi đoạn mã sau.

use [appuals] Vào CREATE TABLE temp (id INT, name varchar (100)); ĐI

Kết quả sẽ như sau.

Tạo bảng

Hơn nữa, hãy tạo một quy trình lưu trữ để được loại bỏ bằng cách sử dụng mã sau.

SỬ DỤNG [appuals] GO SET ANSI_NULLS ON GO ĐẶT QUOTED_IDENTIFIER ON GO Tạo THỦ TỤC [dbo]. [Sp_temp] KHI BẮT ĐẦU ĐẶT SỐ TÀI KHOẢN; CHỌN * từ dbo.temp; KẾT THÚC

Đầu ra sẽ như bên dưới.

Lưu trữ thủ tục tạo

Phương pháp cũ: Trước SQL Server sử dụng thả nếu thoát trên các đối tượng cơ sở dữ liệu

Sử dụng phương pháp DROP IF EXISTS trước SQL Server 2016 yêu cầu viết mã trình bao bọc câu lệnh IF dài.

Bỏ bảng nếu tồn tại

Phương pháp bỏ bảng trước như sau.

Nếu chúng tôi đang sử dụng SQL Server 2015 hoặc phiên bản cũ hơn, chúng tôi cần thực thi nhóm mã sau.

Nếu (OBJECT_ID ('dbo.temp') Không phải là Null) Bảng thả tạm thời

Kết quả sẽ như sau.

Bỏ bàn

Bây giờ cú pháp của nó khá khó hiểu vì vậy nếu bạn không thích nó và bạn đang sử dụng SQL Server 2016 trở lên, bạn có thể sử dụng câu lệnh DROP IF EXIST đơn giản thay vì các trình bao bọc lớn.

Thủ tục thả cửa hàng nếu tồn tại:

Để drop thủ tục, chúng ta phải viết một câu lệnh điều kiện để kiểm tra xem thủ tục store có tồn tại hay không sau đó viết câu lệnh drop. Nếu không, nó sẽ phát sinh lỗi trong trường hợp thủ tục được lưu trữ không tồn tại.

Bây giờ thực thi các câu lệnh sau để bỏ quy trình trong các phiên bản thấp hơn SQL Server 2016.

NẾU TỒN TẠI (CHỌN 1 TỪ sys.procedures WHERE Name = 'sp_temp') THỦ TỤC HỎI dbo.sp_temp

Đầu ra sẽ như thế này.

Thủ tục thả bằng cách sử dụng phương pháp cũ của mã if wrapper

Bỏ cơ sở dữ liệu nếu tồn tại:

Nếu bạn đang sử dụng các phiên bản trước của SQL Server, bạn cần thực thi mã sau để thả cơ sở dữ liệu.

NẾU DB_ID ('appuals') KHÔNG ĐẦY ĐỦ BEGIN DROP DATABASE các ứng dụng END

Kết quả sẽ như sau.

Bỏ cơ sở dữ liệu bằng cách sử dụng một phương pháp cũ

Phương pháp mới: DROP IF EXISTS được hỗ trợ trong phiên bản SQL Server 2016 trở lên

Để thả một đối tượng cơ sở dữ liệu trong SQL Server 2016 trở lên, chúng ta cần thực hiện một câu lệnh đơn giản.

Bỏ bảng nếu tồn tại:

Chúng ta có thể viết một câu lệnh như dưới đây trong SQL Server 2016 để xóa một bảng đã lưu trữ nếu nó tồn tại.

DROP BẢNG NẾU TỒN TẠI dbo.temp

Đầu ra sẽ như thế này.

Thả bảng bằng cách sử dụng phương pháp mới

Thủ tục thả nếu tồn tại:

Bây giờ chúng ta sẽ bỏ thủ tục đã lưu trữ mà chúng ta đã tạo ở đầu bài viết bằng cách thực thi đoạn mã sau.

THỦ TỤC XÓA NẾU TỒN TẠI dbo.sp_temp

Đầu ra sẽ như bên dưới.

Thả bảng bằng cách sử dụng phương pháp mới

Về cú pháp, câu lệnh đơn giản này rất dễ hiểu và dễ nhớ. Tương tự, chúng ta có thể làm theo thủ tục tương tự để loại bỏ các đối tượng cơ sở dữ liệu khác.

Bỏ cơ sở dữ liệu nếu tồn tại:

Thực thi mã sau nếu bạn muốn bỏ cơ sở dữ liệu bằng cách sử dụng kiểm tra nếu tồn tại

SỬ DỤNG MASTER GO DROP DATABASE NẾU TỒN TẠI các ứng dụng

Đầu ra sẽ như bên dưới.

Bỏ cơ sở dữ liệu bằng cách sử dụng phương pháp mới

Lợi ích của việc sử dụng phương pháp này là nếu cơ sở dữ liệu không tồn tại, nó sẽ không gây ra bất kỳ lỗi nào, câu lệnh tiếp theo trong lô sẽ tiếp tục được thực thi. Hãy thử thả lại cơ sở dữ liệu đã bị loại bỏ.

Lỗi phát sinh khi thả lại cơ sở dữ liệu đã bị loại bỏ.

Tương tự như vậy, chúng ta có thể loại bỏ các chỉ mục, khung nhìn, chuỗi, tổ hợp, v.v. từ cơ sở dữ liệu.

3 phút đọc