Question Comment supprimer une table si elle existe dans SQL Server?


Le nom de la table est Scores.

Est-il correct de faire ce qui suit?

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

531
2017-10-25 09:05


origine


Réponses:


Est-il correct de faire ce qui suit?

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

Non.  Cela supprimera la table uniquement si elle contient des lignes (et provoquera une erreur si la table n'existe pas).

Au lieu de cela, pour une table permanente, vous pouvez utiliser

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

Ou, pour une table temporaire, vous pouvez utiliser

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

Pour tout le monde sur SQL Server 2016+, je vais souligner cette réponse - qui a un meilleur moyen.


1080
2017-10-25 09:07



À partir de SQL Server 2016, vous pouvez utiliser

DROP TABLE IF EXISTS dbo.Scores

Référence: DROP IF EXISTS - nouvelle chose dans SQL Server 2016

Ce sera dans la base de données SQL Azure bientôt.


188
2017-11-03 11:21



La méthode ANSI SQL / multiplateforme consiste à utiliser INFORMATION_SCHEMA, qui a été spécifiquement conçu pour interroger des métadonnées sur des objets dans des bases de données SQL.

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

La plupart des serveurs SGBDR modernes fournissent au moins le support de base de INFORMATION_SCHEMA, notamment: MySQL, Postgres, Oracle, IBM DB2, et Microsoft SQL Server 7.0 (et supérieur).


125
2018-01-12 04:02



J'en ai vu tellement qui ne fonctionnent pas vraiment. Quand une table temporaire est créée, elle doit être supprimée du tempdb!

Le seul code qui fonctionne est:

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

48
2017-08-01 11:06



Ou:

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

21
2017-10-25 13:31



J'espère que ça aide:

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

18
2017-09-26 15:35



J'ai écrit un petit UDF qui retourne 1 si son argument est le nom d'une table existante, 0 sinon:

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

Pour supprimer le tableau User s'il existe, appelez-le comme ceci:

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

18
2018-02-28 20:13