Как определить, существует ли таблица в базе данных 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

Нет, если вы квалифицируете схему объекта.
Грант Фритчей

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.