Làm cách nào để xác định xem bảng có tồn tại trong cơ sở dữ liệu SQL Server trong SQL Server 2008 không?


13

Làm cách nào để xác định xem bảng có tồn tại trong cơ sở dữ liệu SQL Server trong SQL Server 2008 không?

Câu trả lời:


18

Nếu bạn truy vấn bảng sysobjects, với một truy vấn như

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype = 'U' là bảng người dùng

sau đó bạn có thể gói đây là một câu lệnh IF EXISTS

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 

5
+1 Điều quan trọng cần lưu ý là Microsoft đã chuyển chức năng như thế này sang Chế độ xem quản lý động (DMV) kể từ SQL Server 2005. Điều này sẽ hoạt động về mặt kỹ thuật, nhưng Microsoft hiện khuyên bạn nên sử dụng DMV sys.tables cho việc này. NẾU EXISTS (CHỌN * TỪ sys.tables WHERE type = 'U' AND name = 'yourTableName'). Về mặt chức năng, tuyên bố của bạn và tuyên bố của tôi làm điều tương tự chính xác. Chỉ muốn đề cập đến DMV. Để tìm hiểu thêm về DMV, hãy xem tài liệu msdn.microsoft.com/en-US/l
Matt M

Đó là một cuộc gọi tốt Matt. Thói quen cũ chết cứng :-) Bản thân bạn là cách tốt hơn.
Miles D

1
Tôi không chắc liệu nó có tạo ra nhiều khác biệt hay không nhưng tôi ủng hộ NẾU EXISTS (CHỌN 1 TỪ sys.tables ...)
David Hayes

@DavidHayes Có, tôi đoán giải pháp này nhanh hơn vì nó không truy vấn để tìm tên cột.
Xriuk

12

Đây là một cách nữa để tìm thấy nó

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'

Đẹp và đơn giản, không cần truy vấn các bảng hệ thống phức tạp. Cảm ơn!
Shadow9

2
Chẳng phải điều đó sẽ phát hiện, ví dụ, các chế độ xem cùng tên? Có lẽ thủ tục lưu trữ và như vậy là tốt?
MarioDS

Không nếu bạn lược đồ đủ điều kiện đối tượng.
Grant Fritchey

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.