Как проверить, существует ли таблица в базе данных? - PullRequest
3 голосов
/ 29 марта 2011

Теперь я использую что-то вроде:

IF (object_id('table', 'U') is not null)  
AND (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))  
    RETURN; 

, чтобы проверить, существует ли эта «таблица» в моей базе данных, но я получаю следующее сообщение об ошибке при запуске сценария, если в таблице нет такой таблицы.текущая база данных:

Сообщение 208, Уровень 16, Состояние 1, Строка 5
Неверное имя объекта 'таблица'.

Это правильный способ проверить, еслитаблица существует в базе данных?Или, может быть, я должен изменить какие-либо настройки своей SQL Management Studio?

ОТВЕТ : я изменил свой сценарий, и все работает хорошо:

IF (object_id('table', 'U') is not null)  
    IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))  
        RETURN;  

Ответы [ 6 ]

2 голосов
/ 29 марта 2011
IF EXISTS (SELECT * 
           FROM sys.objects 
           WHERE object_id = OBJECT_ID(N'table') 
           AND type in (N'U'))

Я столкнулся с похожими проблемами, которые были обнаружены при выполнении запроса. N означает только юникод

1 голос
/ 29 марта 2011

Это может работать лучше для вас

if (object_id('table', 'U') is not null)
  if not exists (SELECT * FROM [table] WHERE id = 0)
1 голос
/ 29 марта 2011
if (object_id('tablex', 'U') is not null) 
begin 
select * from tablex  
end

работает на меня. Если таблица не существует, то компиляция этого оператора должна быть отложена (при условии, что вы используете SQL Server 2005 +).

Если вы ссылаетесь на таблицу в чем-то отличном от оператора сразу после if, вам нужно использовать begin...end.

Обновлен.

Вам нужно использовать

IF (object_id('table', 'U') is not null)
    IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))
       RETURN; 

Ваше существующее утверждение не может быть скомпилировано как есть. Весь оператор компилируется, и все объекты должны существовать в этот момент, даже если компиляция оператора ранее была отложена.

Кроме того, SQL Server ни в коем случае не гарантирует оценку короткого замыкания .

0 голосов
/ 29 марта 2011

Я думаю, что вы предоставляете Имя таблицы для [Таблица], если это так, попробуйте изменить его на Нечто другое.Тогда это будет нормально работать, я думаю.Тогда все вышеперечисленные ответы будут работать нормально.

0 голосов
/ 29 марта 2011

Это один из многих способов.

   IF EXISTS (SELECT 1 
        FROM sysobjects 
        WHERE xtype='u' AND name='tablename') 
            SELECT 'tablename exists.' 
    ELSE 
            SELECT 'tablename does not exist.' 
0 голосов
/ 29 марта 2011

вы можете сделать что-то вроде этого:

IF (EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_TYPE='BASE TABLE' 
    AND TABLE_NAME='QRTZ_JOB_DETAILS'))
    BEGIN
    PRINT 'EXISTS'
    END

где TABLE_NAME - имя таблицы, которую вы хотите проверить в своей базе данных.

UPDATE:

если вы используете SQL SERVER 2000+, ответ мсарчет более уместен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...