2009-05-29 3 views
6

J'essaie de rechercher une table SQL par son nom et si elle existe, supprimez-la. Tout cela doit être fait en C# en utilisant SMO. Pour compliquer un peu plus la table a aussi un schéma autre que "dbo". Ultimement, la table sera recréée via SMO (j'ai ce travail) mais je dois m'assurer qu'elle n'est pas là avant de pouvoir la recréer.Vérification et suppression d'une table existante via C# et SMO

Tous les exemples que j'ai vus semblent créer et abandonner la table tous dans le même contexte. Dans mon cas, la table aura été créée et remplie lors d'une session précédente.

Répondre

0

La première question est, pourquoi ne pouvez-vous pas laisser tomber et recréer avec DDL?

En réponse à votre question:

Table table = new Table(myDatabase, "MyTable", "MySchema"); 
+0

Merci pour votre réponse. J'ai effectivement descendu le même chemin mais le chemin différent: myTable.Schema = "MySchema" La structure de table elle-même est déterminée à la volée en analysant un schéma XML. –

1

Ne pourriez-vous conclure votre déclaration DROP TABLE dans un bloc try/catch, et jetez-les erreurs qui se produisent?

Quoi qu'il en soit, le sql pour déterminer si une table existe est:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U')) 
+3

Il est contre-indiqué d'utiliser des erreurs pour le contrôle de flux de programme. Merci pour la réponse. –

+1

Eh bien, vous ne pourriez pas utiliser le IF EXISTS que j'ai fourni pour vérifier d'abord, si vous n'aimez pas le Try/Catch? –

8
var connection = new SqlConnection(connectionString); 
var server = new Server(new ServerConnection(connection)); 

db = server.Databases["YourFavDB"]; 

db.Tables["YourHatedTable"].Drop(); 
+0

Le seul à répondre à la question et pas un seul upvote jusqu'à maintenant. Y a-t-il une justice sur SO? – MrTelly

+0

Il n'y a aucune mention de schéma ici. Il pourrait être soit complètement raisonnable, soit dangereux de supposer que le schéma est dbo, selon votre environnement – Davos

+0

Bonne réponse, je pense que DropIfExists() serait mieux – Thunderchild

3

Je pense que la meilleure approche serait:

Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"]; 
bool tableExists= myDataBase.Tables.Contains("myTable"); 
if (tableExists) 
{ 
    myDataBase.Tables["myTable"].Drop(); 
} 
+0

Cela devrait absolument être la réponse acceptée à cette question. –

Questions connexes