Как я могу удалить таблицу, если она существует в SQL Server 2000? - PullRequest
20 голосов
/ 30 октября 2008

У меня есть пакет DTS, который удаляет таблицу, затем создает ее и заполняет, но иногда что-то происходит, и после сброса таблицы происходит сбой пакета. Если он будет выполнен повторно, это не удастся, потому что таблица еще не была создана.

Есть ли что-то вроде "если существует" для SQLServer 2000, как в MySQL?

спасибо.

Ответы [ 7 ]

33 голосов
/ 30 октября 2008

или быстрее:

IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL  
  DROP TABLE temp_ARCHIVE_RECORD_COUNTS  
10 голосов
/ 30 октября 2008
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
DROP TABLE TableName;
GO

Вы можете проверить список определений типов в таблице sys.objects здесь , если хотите проверить, существуют ли другие объекты в вашей базе данных.

8 голосов
/ 30 октября 2008

Никто еще не упомянул этот метод:

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='MyTable') 
begin 
    drop table MyTable
end

Это самый переносимый метод - он работает как минимум с MSSQL2000 до MSSQL2008.

Таблицы INFORMATION_SCHEMA являются частью стандарта SQL-92.

3 голосов
/ 30 октября 2008

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

Я проголосовал за ответ Трейси Никсон. Я бы сказал, что вы хотите избежать запросов к таблице sysobjects напрямую, потому что обновление Microsoft может сломать такой код. Вы изолируете себя от этого с помощью функции OBJECT_ID.

3 голосов
/ 30 октября 2008

Sure:

IF OBJECT_ID('YOURTABLENAME') IS NOT NULL

где YOURTABLENAME - это имя вашей таблицы.

Если это временная таблица, просто добавьте tempdb.# перед вызовом функции OBJECT_ID.

1 голос
/ 30 октября 2008

Следующие работы, просто замените TABLENAME на вашу таблицу

IF EXISTS( SELECT * FROM dbo.sysobjects where id = object_id(N'TABLENAME') AND OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
    DROP TABLE TABLENAME
END
1 голос
/ 30 октября 2008

Вам необходимо проверить sysobjects таблицу

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