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
Est-il correct de faire ce qui suit?
IF EXISTS(SELECT * FROM dbo.Scores) DROP TABLE dbo.Scores
Non. Cela supprimera le tableau uniquement s'il contient des lignes (et générera une erreur si le tableau n'existe pas).
À la place, vous pouvez utiliser pour une table permanente
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;
SQL Server 2016+ offre un meilleur moyen d'utiliser DROP TABLE IF EXISTS …
. Voir la réponse de @Jovan .
À partir de SQL Server 2016, vous pouvez utiliser
DROP TABLE IF EXISTS dbo.Scores
Référence: DROP IF EXISTS - nouveauté de SQL Server 2016
Ce sera bientôt dans la base de données SQL Azure.
La méthode ANSI SQL/multiplateforme consiste à utiliser INFORMATION_SCHEMA , spécialement 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 de 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) .
J'ai vu tellement de gens qui ne fonctionnent pas vraiment. quand une table temporaire est créée, elle doit être supprimée de la base de données tempdb!
Le seul code qui fonctionne est:
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
J'espère que ça aide:
begin try drop table #tempTable end try
begin catch end catch
Ou:
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
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 la table User
si elle existe, appelez-la comme suit:
IF [dbo].[Table_exists]('User') = 1 Drop table [User]
Dans SQL Server 2016 (13.x) et supérieur
DROP TABLE IF EXISTS dbo.Scores
Dans les versions antérieures
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
U est votre table type
Simple est que:
IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
où dbo.TableName
est votre table souhaitée et 'U' est type
de votre table
.
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
DROP TABLE Scores
GO
J'utilise:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end