Hoe verwijder je een tafel als deze bestaat?

De tabelnaam is Scores.

Is het correct om het volgende te doen?

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

Antwoord 1, autoriteit 100%

Is het correct om het volgende te doen?

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

Nee.De tabel wordt alleen verwijderd als deze rijen bevat (en er wordt een fout gegenereerd als de tabel niet bestaat).

In plaats daarvan kunt u voor een vaste tafel

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

Of, voor een tijdelijke tafel die u kunt gebruiken

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

SQL Server 2016+ heeft een betere manier, met behulp van DROP TABLE IF EXISTS …. Zie het antwoord van @Jovan.


Antwoord 2, autoriteit 31%

Vanaf SQL Server 2016 kunt u

DROP TABLE IF EXISTS dbo.Scores

Referentie: DROP IF EXISTS – nieuw in SQL Server 2016

Het staat binnenkort in SQL Azure Database.


Antwoord 3, autoriteit 11%

De ANSI SQL/cross-platform manier is om de INFORMATION_SCHEMAte gebruiken, die specifiek ontworpen om metagegevens over objecten in SQL-databases op te vragen.

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

De meeste moderne RDBMS-servers bieden ten minste basisondersteuning voor INFORMATION_SCHEMA, waaronder: MySQL, Postgres, Oracle, IBM DB2en Microsoft SQL Server 7.0 (en hoger) ).


Antwoord 4, autoriteit 5%

Ik heb er zoveel gezien die niet echt werken.
wanneer een tijdelijke tabel wordt gemaakt, moet deze uit de tempdb worden verwijderd!

De enige code die werkt is:

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

Antwoord 5, autoriteit 3%

In SQL Server 2016 (13.x) en hoger

DROP TABLE IF EXISTS dbo.Scores

In eerdere versies

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

Uis uw table type


Antwoord 6, autoriteit 2%

Of:

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

Antwoord 7, autoriteit 2%

Ik hoop dat dit helpt:

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

Antwoord 8, autoriteit 2%

Er is een gemakkelijkere manier

DROP TABLE IF EXISTS table_name;

Antwoord 9

Ik heb een kleine UDF geschreven die 1 retourneert als het argument de naam is van een bestaande tabel, anders 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

Om de tabel Userte verwijderen als deze bestaat, noem je deze als volgt:

IF [dbo].[Table_exists]('User') = 1 Drop table [User]

Antwoord 10

Eenvoudig is dat:

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

waarbij dbo.TableNameuw gewenste tabel is en ‘U’typevan uw table.


Antwoord 11

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

Antwoord 12

Ik gebruik:

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

Antwoord 13

Zorg ervoor dat u aan het einde de beperking cascadegebruikt om automatisch alle objecten te verwijderen die afhankelijk zijn van de tabel (zoals weergaven en projecties).

drop table if exists tableName cascade;

Antwoord 14

SQL Server 2016 en hoger de beste en eenvoudigste is
LAAG TAFEL INDIEN BESTAAN [NAAM TABEL]

Bijvoorbeeld:
DROP TABEL INDIEN BESTAAT dbo.Scores

als stel je voor dat de bovenstaande niet werkt, dan kun je de onderstaande gebruiken
IF OBJECT_ID(‘dbo.Scores’, ‘u’) IS NIET NULL
DROP TABEL dbo.Scores;


Antwoord 15

Een betere visuele en gemakkelijke manier, als u Visual Studio gebruikt, gewoon openen vanuit de menubalk,

Bekijken -> SQL Server-objectverkenner

het zou moeten openen zoals hier getoond

voer hier de afbeeldingsbeschrijving in

Selecteer en klik met de rechtermuisknop op de tabel die u wilt verwijderen, en verwijder vervolgens. Zo’n scherm zou getoond moeten worden. Klik op Database bijwerken om te bevestigen.

voer hier de afbeeldingsbeschrijving in

Deze methode is erg veilig omdat het u feedback geeft en waarschuwt voor eventuele relaties van de verwijderde tabel met andere tabellen.

Other episodes