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

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

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

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

Ответ 1

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

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.

Ответ 2

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

DROP TABLE IF EXISTS dbo.Scores

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

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

Ответ 3

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 (и больше).

Ответ 4

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

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

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"

Ответ 5

Или:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores

Ответ 6

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

begin try drop table #tempTable end try
begin catch end catch

Ответ 7

В 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

Ответ 8

Я написал немного 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]

Ответ 9

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

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

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

Ответ 10

IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO

Ответ 11

Я использую:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end

Ответ 12

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

DROP TABLE IF EXISTS dbo.Product

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

DROP TRIGGER IF EXISTS trProductInser

Ответ 13

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

IF OBJECT_ID('mytablename') IS NOT NULL 
BEGIN
    DROP TABLE mytablename 
END 

Ответ 14

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

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

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

enter image description here

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

enter image description here

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

Ответ 15

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

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

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

exec (@qry)

select * from TempData 

drop table TempData