Як визначити, чи існує таблиця в базі даних SQL Server у SQL Server 2008?


Відповіді:


18

Якщо ви запитуєте таблицю sysobjects, з таким запитом

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

xtype = 'U' - це таблиця користувача

Ви можете потім обернути це твердженням IF EXISTS

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

5
+1 Важливо зауважити, що Microsoft переміщує подібну функціональність до Dynamic Management Views (DMVs) з часу SQL Server 2005. Це технічно буде працювати, але Microsoft тепер рекомендує використовувати для цього sys.tables DMV. ЯКЩО ВИНАГАЄТЬСЯ (ВИБІРТЕ * ВІД sys.tables WHERE type = 'U' AND name = 'yourTableName'). Функціонально ваша заява та моя заява роблять точно те саме. Просто хотів згадати DMV. Щоб дізнатися більше про DMV, перегляньте документацію msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M

Це гарний дзвінок Метта. Старі звички важко вмирають :-) Ваш найкращий спосіб.
Miles D

1
Я не впевнений, чи має це велика різниця, але я віддаю перевагу, ЯКЩО ВИНАГАЄТЬСЯ (ВИБІР 1 З sys.tables ...)
David Hayes

@DavidHayes Так, я думаю, що це рішення швидше, оскільки воно не запитує знайти назви стовпців.
Xriuk

12

Ось ще один спосіб її пошуку

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

Приємно і просто, не потрібно запитувати складні системні таблиці. Спасибі!
Shadow Wizard є Ear for You

2
Хіба це не виявило б, наприклад, однойменні представлення? Можливо, збережені процедури і такі?
MarioDS

Не, якщо ви схематизуєте об'єкт.
Грант Фрітчі

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.