2009-05-29 13 views
6

Ich versuche, nach einer SQL-Tabelle nach Namen suchen, und wenn es existiert, löschen Sie es. Dies alles muss in C# mithilfe von SMO erfolgen.Überprüfen und Löschen einer vorhandenen Tabelle über C# und SMO

Um es ein wenig komplizierter zu machen, hat die Tabelle auch ein anderes Schema als "dbo".

Ultimate wird die Tabelle über SMO neu erstellt (ich habe das funktioniert), aber ich muss sicherstellen, dass es nicht da ist, bevor ich es neu erstellen kann.

Alle Beispiele, die ich gesehen habe, scheinen zu erstellen und dann die Tabelle alle im selben Kontext fallen zu lassen. In meinem Fall wurde die Tabelle in einer vorherigen Sitzung erstellt und ausgefüllt.

Antwort

0

Erste Frage ist, warum können Sie nicht fallen und mit DDL neu erstellen?

Und in Antwort auf Ihre Frage:

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

Dank für Ihre Antwort danken. Ich bin tatsächlich die gleiche Route, aber anderen Pfad gegangen: myTable.Schema = "MySchema" Die Tabellenstruktur selbst wird im laufenden Betrieb durch Parsen eines XML-Schemas bestimmt. –

1

Könnten Sie nicht nur Ihre DROP TABLE-Anweisung in einem try/catch-Block wickeln, und eventuelle Fehler verwerfen, die auftreten?

die sql Wie auch immer, um zu bestimmen, ob eine Tabelle vorhanden ist:

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

Es geht gegen mein Korn, um Fehler für die Programmablaufsteuerung zu verwenden. Danke für die Antwort. –

+1

Nun, könntest du die IF EXISTS, die ich zur Verfügung gestellt habe, nicht benutzen, um zuerst zu überprüfen, ob du den Try/Catch nicht magst? –

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

db = server.Databases["YourFavDB"]; 

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

Der einzige, der die Frage beantwortet hat und bisher keine einzige Verbesserung. Gibt es Gerechtigkeit bei SO? – MrTelly

+0

Schema wird hier nicht erwähnt. Es könnte entweder völlig vernünftig oder gefährlich sein, das Schema dbo anzunehmen, abhängig von Ihrer Umgebung. – Davos

+0

Gute Antwort, ich denke, DropIfExists() wäre besser – Thunderchild

3

Ich denke, der beste Ansatz wäre:

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

Dies sollte absolut die akzeptierte Antwort auf diese Frage sein. –