Ответ 1
Или быстрее:
IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL
DROP TABLE temp_ARCHIVE_RECORD_COUNTS
У меня есть пакет DTS, который отбрасывает таблицу, затем создает ее и заполняет ее, но иногда что-то происходит, и пакет выходит из строя после таблицы перетаскивания. Если он повторится, это не поможет, потому что таблица еще не создана.
Есть ли что-то вроде "if exists" для SQLServer 2000, как в MySQL?
спасибо.
Или быстрее:
IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL
DROP TABLE temp_ARCHIVE_RECORD_COUNTS
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 здесь, если вы хотите проверить, существуют ли другие объекты в вашей базе данных,
Никто еще не упомянул об этом методе:
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='MyTable')
begin
drop table MyTable
end
Это самый переносимый метод - он работает, по крайней мере, с MSSQL2000 до MSSQL2008.
Таблицы INFORMATION_SCHEMA являются частью стандарта SQL-92.
Конечно:
IF OBJECT_ID('YOURTABLENAME') IS NOT NULL
где YOURTABLENAME
- любое имя вашей таблицы.
Если это временная таблица, просто добавьте tempdb.#
перед вызовом функции OBJECT_ID
.
Одна вещь, которую следует помнить, когда вы бросаете объект и затем добавляете обратно в базу данных, также добавляет все разрешения обратно в таблицу. Это несколько раз подстегнуло нас.
Я проголосовал за TracyNixon. Я бы сказал, что вы хотите избегать непосредственного запроса таблицы sysobjects, потому что обновление Microsoft может сломать такой код. Вы изолируете себя от этого с помощью функции OBJECT_ID.
Вам нужно проверить таблицу sysobjects
Следующие работы просто замените TABLENAME на таблицу
IF EXISTS( SELECT * FROM dbo.sysobjects where id = object_id(N'TABLENAME') AND OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
DROP TABLE TABLENAME
END