Как определить, существует ли таблица в базе данных SQL Server в SQL Server 2008?

13

Как определить, существует ли таблица в базе данных SQL Server в SQL Server 2008?

Амир Резаи
источник

Ответы:

18

Если вы запросите таблицу sysobjects, с запросом, как

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

xtype = 'U' - пользовательская таблица

Вы можете затем обернуть это утверждение ЕСЛИ СУЩЕСТВУЕТ

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 
Майлз Д
источник
5
+1 Важно отметить, что Microsoft переводит такую ​​функциональность в Dynamic Management Views (DMV) с SQL Server 2005. Технически это будет работать, но теперь Microsoft рекомендует использовать для этого DMV sys.tables. ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ sys.tables, ГДЕ type = 'U' И name = 'yourTableName'). Функционально ваше утверждение и мое утверждение делают одно и то же. Просто хотел упомянуть DMV. Чтобы узнать больше о DMV, ознакомьтесь с документацией msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Мэтт М
Это хороший звонок Мэтт. Старые привычки тяжело умирают :-) Твой путь лучше.
Майлз Д
1
Я не уверен, имеет ли это большое значение, но я предпочел бы, ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.tables ...)
Дэвид Хейс
@DavidHayes Да, я думаю, что это решение быстрее, потому что оно не запрашивает имена столбцов.
Xriuk
12

Вот еще один способ найти его

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'
кочевник
источник
Красиво и просто, нет необходимости запрашивать сложные системные таблицы. Благодарность!
Shadow9
2
Разве это не обнаружит, например, взгляды с тем же именем? Возможно хранимые процедуры и тому подобное?
MarioDS
Нет, если вы квалифицируете схему объекта.
Грант Фритчей
1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Дивья Дия
источник