Trong SQL Server, nếu bạn cố gắng loại bỏ một đối tượng không tồn tại, bạn sẽ gặp lỗi. Nếu không muốn gặp lỗi, bạn cần thêm một số mã bổ sung để kiểm tra sự tồn tại của đối tượng.
Trước SQL Server 2016, bạn cần thêm IF
câu lệnh truy vấn các đối tượng hệ thống có liên quan để tìm xem đối tượng đó có tồn tại hay không.
Từ SQL Server 2016, bây giờ bạn có thể sử dụng một phương pháp mới, rõ ràng hơn để kiểm tra xem một đối tượng có tồn tại hay không. Chúng tôi sẽ gọi nó là DROP IF EXISTS
(còn được gọi là “DIE”).
Ví dụ 1 - Cú pháp cơ bản
Cú pháp không thực sự chứa DROP IF EXISTS
chuỗi như nó là. Những gì bạn cần làm là chèn loại đối tượng vào giữa DROP
và IF
.
DROP TABLE NẾU CÓ Khách hàng
Trong trường hợp này, tôi đang bỏ một bảng, vì vậy từ TABLE
được chèn vào giữa DROP
và IF
. Tên của bảng tôi muốn bỏ (trong trường hợp này là Khách hàng ) được đặt ở cuối.
Ví dụ 2 - Bản trình diễn cơ bản
Dưới đây là một ví dụ về việc tạo cơ sở dữ liệu, sau đó xóa nó, sau đó cố gắng thả lại.
TẠO CƠ SỞ DỮ LIỆU Homer; CƠ SỞ DỮ LIỆU GODROP NẾU TỒN TẠI Homer; CƠ SỞ DỮ LIỆU GODROP NẾU TỒN TẠI Homer; ĐI
Kết quả:
Đã bắt đầu thực thi truy vấn tại Dòng 17 Các lệnh đã hoàn tất thành công. Bắt đầu thực thi truy vấn tại Dòng 19 Các lệnh đã hoàn tất thành công.Không có lỗi nào xảy ra, ngay cả khi tôi cố gắng thả một đối tượng không tồn tại trên dòng thứ ba.
Ví dụ 3 - Không có NẾU TỒN TẠI
Đây lại là nó, ngoại trừ lần này tôi xóa
IF EXISTS
một phần.TẠO CƠ SỞ DỮ LIỆU Homer; GODROP DATABASE Homer; GODROP DATABASE Homer; ĐIKết quả:
Đã bắt đầu thực thi truy vấn tại Dòng 17 Các lệnh đã hoàn tất thành công Bắt đầu thực thi truy vấn tại Dòng 19 Các lệnh đã hoàn tất thành công. bạn không có quyền.Trong trường hợp này, tôi gặp lỗi vì nó đang cố gắng đánh rơi một đối tượng không tồn tại.
Ví dụ 4 - Cột và Ràng buộc
Bạn cũng có thể sử dụng DIE trên các cột và ràng buộc.
Ví dụ:bạn có thể sử dụng
DROP COLUMN IF EXISTS
trongALTER TABLE
của bạn tuyên bố.Đây là một ví dụ.
DROP TABLE IF tồn tại DieTest; GOCREATE TABLE DieTest (DieTestId uniqueidentifier NOT NULL DEFAULT NEWID (), DieTestName varchar (70), InsertDate datetime2 (7) NOT NULL DEFAULT GETDATE ()); GOALTest BẢNG MỤC TIÊU DieTestNameS COLUMTest BẢNG DieTestDROP COLUMN NẾU TỒN TẠI DieTestName; ĐIKết quả:
Đã bắt đầu thực thi truy vấn tại Dòng 1 Các lệnh đã hoàn tất thành công. Bắt đầu thực thi truy vấn tại Dòng 3 Các lệnh đã hoàn tất thành công. Bắt đầu thực thi truy vấn tại Dòng 11 Các lệnh đã hoàn tất thành công.Ví dụ 5 - Trước SQL Server 2016
Trước SQL Server 2016, để kiểm tra sự tồn tại của một đối tượng, bạn cần phải làm như sau:
NẾU DB_ID ('Homer') KHÔNG PHẢI LÀ CƠ SỞ DỮ LIỆU NULLDROP Homer;Ví dụ đó sử dụng
DB_ID()
bởi vì chúng tôi đang xử lý cơ sở dữ liệu. Nếu đối tượng là một loại khác, bạn có thể cần sử dụngOBJECT_ID()
chức năng hoặc một cái gì đó khác hoàn toàn.Ví dụ:
IF OBJECT_ID ('dbo.Customers,' U ') KHÔNG PHẢI LÀ BẢNG NULLDROP dbo.Customers; NẾU TỒN TẠI (CHỌN * TỪ sys.triggers WHERE name ='MyTrigger') DROP TRIGGER MyTriggerKhi chúng ta bắt đầu xem mã này, chúng ta có thể hiểu tại sao
DROP IF EXISTS
là một bổ sung đáng hoan nghênh cho cú pháp T-SQL.Đối tượng Đủ điều kiện
DIE có thể được sử dụng trên các đối tượng sau.
ĐỒNG Ý | THỦ TỤC | BẢNG |
LẮP RÁP | VAI TRÒ | TRIGGER |
XEM | QUY TẮC | LOẠI |
CƠ SỞ DỮ LIỆU | SCHEMA | NGƯỜI DÙNG |
ĐỊNH NGHĨA | CHÍNH SÁCH BẢO MẬT | XEM |
CHỨC NĂNG | SEQUENCE | |
CHỈ SỐ | ĐỒNG BỘ |
Như đã đề cập, DIE cũng có thể được sử dụng trên các cột và ràng buộc khi sử dụng ALTER TABLE
tuyên bố:
- ALTER TABLE DROP COLUMN NẾU TỒN TẠI
- ALTER TABLE DROP CONSTRAINT NẾU TỒN TẠI