Comment puis-je supprimer une table si elle existe dans SQL Server 2000?

J'ai un package DTS qui dépose une table puis la crée et la remplit mais quelque chose se produit parfois et le package échoue après la table de baisse. S'il est relancé, il échoue parce que la table n'a pas encore été créée.

Y at-il quelque chose comme "si existe" pour SQLServer 2000 comme dans MySQL?

Merci.

Ou plus vite:

IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL DROP TABLE temp_ARCHIVE_RECORD_COUNTS 
  • OBJECT_ID – Référence MSDN – SQL Server 2000
  • OBJECT_ID – Référence MSDN – SQL Server 2008
 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U')) DROP TABLE TableName; GO 

Vous pouvez vérifier une list de définitions de types dans la table sys.objects si vous voulez vérifier si d'autres objects existent dans votre database.

Personne n'a encore mentionné cette méthode:

 if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='MyTable') begin drop table MyTable end 

C'est la méthode la plus portable – elle fonctionne au less sur MSSQL2000 jusqu'à MSSQL2008.

Les tables INFORMATION_SCHEMA font partie de la norme SQL-92.

Une chose à retenir lorsque vous supprimez et objects et puis append à la database est également append des permissions à la table. Cela nous a fait trébucher un certain nombre de fois.

J'ai voté pour la réponse de TracyNixon. Je dirais que vous voulez éviter d'interroger directement la table sysobjects car une mise à jour de Microsoft pourrait casser ce genre de code. Vous vous isolez de cela en utilisant la fonction OBJECT_ID.

Sûr:

IF OBJECT_ID('YOURTABLENAME') IS NOT NULL

YOURTABLENAME est quel que soit le nom de votre table.

S'il s'agit d'une table temporaire, ajoutez simplement tempdb.# Avant l'appel de la fonction OBJECT_ID .

Vous devez vérifier la table sysobjects

Les travaux suivants, il suffit de replace TABLENAME avec votre table

 IF EXISTS( SELECT * FROM dbo.sysobjects where id = object_id(N'TABLENAME') AND OBJECTPROPERTY(id, N'IsTable') = 1) BEGIN DROP TABLE TABLENAME END