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 User
te 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.TableName
uw gewenste tabel is en ‘U’type
van 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 cascade
gebruikt 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
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.
Deze methode is erg veilig omdat het u feedback geeft en waarschuwt voor eventuele relaties van de verwijderde tabel met andere tabellen.