T-SQL không bao gồm IF NOT EXISTS
với CREATE TABLE
của nó , giống như một số DBMS khác.
Do đó, nếu chúng ta muốn kiểm tra sự tồn tại của bảng trước khi tạo nó trong SQL Server, chúng ta cần sử dụng các phương pháp khác.
Tùy chọn 1:Kiểm tra ID đối tượng
Trong SQL Server, chúng ta có thể sử dụng OBJECT_ID()
chức năng kiểm tra sự tồn tại của bảng trước khi chúng tôi cố gắng tạo nó:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
GO
Ví dụ trên kiểm tra ID đối tượng cho một dbo.t1
bảng.
Đối số thứ hai cho OBJECT_ID()
chỉ định loại đối tượng mà chúng tôi đang tìm kiếm. Trong trường hợp này, chúng tôi sử dụng U
, dành cho "bảng do người dùng xác định".
OBJECT_ID()
trả về số nhận dạng đối tượng cơ sở dữ liệu của một đối tượng trong phạm vi lược đồ. Nếu đối tượng không tồn tại hoặc nếu bạn không có quyền truy cập vào nó, hàm sẽ trả về NULL. Do đó, chúng ta có thể kiểm tra giá trị NULL và chỉ tạo bảng nếu hàm này trả về NULL.
Chúng tôi có thể sử dụng OBJECT_ID()
chức năng kiểm tra ID đối tượng của bảng sau khi nó được tạo:
SELECT OBJECT_ID(N'dbo.t1', N'U');
Kết quả ví dụ:
354100302
Nếu chúng tôi muốn biết thêm một chút thông tin, chúng tôi có thể làm như sau:
sp_tables 't1';
Kết quả:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | KrankyKranes | dbo | t1 | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Đây, KrankyKranes
là cơ sở dữ liệu mà tôi đã tạo bảng trong đó.
Có nhiều cách khác để xem các bảng hiện có. Hãy xem 6 cách để kiểm tra xem một bảng có tồn tại trong SQL Server để làm ví dụ hay không.
Tùy chọn 2:Truy vấn sys.tables
Một cách khác để kiểm tra xem bảng đã tồn tại hay chưa là truy vấn sys.tables
chế độ xem danh mục hệ thống.
Ví dụ:
IF NOT EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
Điều đó thực hiện một điều tương tự với ví dụ trước; nó kiểm tra sự tồn tại của bảng và chỉ tạo nó nếu nó không tồn tại.
Bất kể phương pháp nào được sử dụng để kiểm tra sự tồn tại của bảng, lệnh sẽ hoàn tất thành công, bất kể bảng có tồn tại hay không.
Vì vậy, chúng tôi nhận được kết quả sau từ cả hai phương pháp:
Commands completed successfully.
Tôi nhận được thông báo đó cho dù bảng đã tồn tại hay chưa.
Nếu bảng đã tồn tại nhưng chúng tôi không kiểm tra sự tồn tại của bảng, chúng tôi sẽ gặp lỗi như sau:
Msg 2714, Level 16, State 6, Line 1 There is already an object named 't1' in the database.
Điều quan trọng cần lưu ý là, chỉ vì một bảng có tên đó đã tồn tại trong cơ sở dữ liệu, điều đó không có nghĩa là bảng đó có định nghĩa chính xác. Các phương pháp trên chỉ cần kiểm tra bảng theo tên và giản đồ.