it-swarm.com.de

Wie lösche ich eine Tabelle, wenn sie in SQL Server existiert?

Der Tabellenname ist Scores.

Ist es richtig, Folgendes zu tun?

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

Ist es richtig, Folgendes zu tun?

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

Nein. Dadurch wird die Tabelle nur gelöscht, wenn sie Zeilen enthält (und ein Fehler ausgegeben, wenn die Tabelle nicht vorhanden ist).

Stattdessen können Sie für eine permanente Tabelle verwenden.

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

Oder für eine temporäre Tabelle können Sie verwenden

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

SQL Server 2016+ bietet mit DROP TABLE IF EXISTS … eine bessere Möglichkeit. Siehe die Antwort von @Jovan .

1262
Martin Smith

Ab SQL Server 2016 können Sie verwenden

DROP TABLE IF EXISTS dbo.Scores

Referenz: DROP IF EXISTS - Neues in SQL Server 2016

Es wird in Kürze in der SQL Azure-Datenbank verfügbar sein.

302
Jovan MSFT

Die ANSI SQL/Cross-Platform-Methode ist die Verwendung von INFORMATION_SCHEMA , das speziell zum Abfragen von Metadaten zu Objekten in SQL-Datenbanken entwickelt wurde.

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

Die meisten modernen RDBMS-Server bieten zumindest grundlegende INFORMATION_SCHEMA-Unterstützung, einschließlich: MySQL , Postgres , Oracle , IBM DB2 = und Microsoft SQL Server 7.0 (und höher) .

144
jveazey

Habe so viele gesehen, die nicht wirklich funktionieren. Wenn eine temporäre Tabelle erstellt wird, muss sie aus der temporären Tabelle gelöscht werden!

Der einzige Code, der funktioniert, ist:

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

Ich hoffe das hilft:

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

Oder:

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

Ich habe eine kleine UDF geschrieben, die 1 zurückgibt, wenn das Argument der Name einer vorhandenen Tabelle ist, andernfalls 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

Um die Tabelle User zu löschen, rufen Sie sie wie folgt auf:

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

In SQL Server 2016 (13.x) und höher

DROP TABLE IF EXISTS dbo.Scores

In früheren Versionen

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

U ist dein table type

18
Farhan Yaseen

Einfach ist das:

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

dabei ist dbo.TableName Ihre gewünschte Tabelle und 'U'type Ihrer table.

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

Ich benutze:

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