Как удалить таблицу, если она существует в SQL Server?

Имя таблицы Scores.

Правильно ли сделать следующее?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores 
+626
25 окт. '11 в 9:05
источник поделиться
15 ответов

Правильно ли делать следующее?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

Нет. Это приведет к удалению таблицы, только если она содержит какие-либо строки (и вызовет ошибку, если таблица не существует).

Вместо этого для постоянного стола вы можете использовать

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
  DROP TABLE dbo.Scores; 

Или для временной таблицы вы можете использовать

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

SQL Server 2016+ имеет лучший способ, используя DROP TABLE IF EXISTS …. Смотрите ответ @Jovan.

+1215
25 окт. '11 в 9:07
источник

Из SQL Server 2016 вы можете использовать

DROP TABLE IF EXISTS dbo.Scores

Ссылка: DROP IF EXISTS - новое в SQL Server 2016

Он скоро появится в базе данных SQL Azure.

+281
03 нояб. '15 в 11:21
источник

ANSI SQL/межплатформенный способ заключается в использовании INFORMATION_SCHEMA, который был специально разработан для запроса метаданных об объектах в базе данных SQL.

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
    drop table dbo.Scores;

Большинство современных серверов РСУБД предоставляют, по крайней мере, базовую поддержку INFORMATION_SCHEMA, в том числе: MySQL, Postgres, Oracle, IBM DB2 и Microsoft SQL Сервер 7.0 (и больше).

+141
12 янв. '13 в 4:02
источник

Видели так много, что на самом деле не работают. когда создается временная таблица, ее необходимо удалить из tempdb!

Единственный действующий код:

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"
+57
01 авг. '14 в 11:06
источник

Или:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores
+24
25 окт. '11 в 13:31
источник

Надеюсь, это поможет:

begin try drop table #tempTable end try
begin catch end catch
+23
26 сент. '14 в 15:35
источник

Я написал немного UDF, который возвращает 1, если его аргумент является именем существующей таблицы, 0 в противном случае:

CREATE FUNCTION [dbo].[Table_exists]
(
    @TableName VARCHAR(200)
)
    RETURNS BIT
AS
BEGIN
    If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
        RETURN 1;

    RETURN 0;
END

GO

Чтобы удалить таблицу User, если она существует, вызовите ее так:

IF [dbo].[Table_exists]('User') = 1 Drop table [User]
+18
28 февр. '13 в 20:13
источник

В SQL Server 2016 (13.x) и выше

DROP TABLE IF EXISTS dbo.Scores

В более ранних версиях

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
DROP TABLE dbo.Scores; 

U ваш table type

+13
08 нояб. '17 в 11:51
источник

Простым является то, что:

IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName

где dbo.TableName - ваша желаемая таблица, а "U" - type вашего table.

+6
13 апр. '17 в 10:33
источник
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO
+3
31 мар. '17 в 5:25
источник

Я использую:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end
+2
24 янв. '17 в 15:12
источник

Вы также можете сделать это

DROP TABLE IF EXISTS dbo.Product

Отбрасывается триггер

DROP TRIGGER IF EXISTS trProductInser
+2
02 нояб. '17 в 11:30
источник

Используйте эту команду, я использовал это.

IF OBJECT_ID('mytablename') IS NOT NULL 
BEGIN
    DROP TABLE mytablename 
END 
-1
22 апр. '16 в 11:00
источник

Лучший визуальный и простой способ, если вы используете Visual Studio, просто откройте в строке меню,

Вид → Обозреватель объектов SQL Server

он должен открыться как показано здесь

enter image description here

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

enter image description here

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

-1
26 мар. '19 в 8:44
источник

Сделайте это, это самый простой способ.

qry будет вашим собственным запросом, независимо от того, что вы хотите в списке выбора.

set @qry = ' select * into TempData from (' + @qry + ')Tmp  '

exec (@qry)

select * from TempData 

drop table TempData
-8
30 мар. '17 в 9:30
источник

Посмотрите другие вопросы по меткам или Задайте вопрос