2009-05-29 9 views
6

Sto cercando di cercare una tabella di SQL per nome e se esiste cadere. Tutto questo deve essere fatto in C# usando SMO.Controllo e far cadere una tabella esistente tramite C# e SMO

A complicare un po 'più al tavolo ha anche uno schema di altro allora "dbo".

In definitiva il tavolo verrà ricreato tramite SMO (ho questo funzionamento) ma devo assicurarmi che non ci sia prima che io possa ricrearlo.

Tutti gli esempi che ho visto sembrano creare e quindi rilasciare la tabella tutti nello stesso contesto. Nel mio caso la tabella sarà stata creata e popolata in una sessione precedente.

risposta

0

prima domanda è: perché si può far cadere e ricreare con DDL?

E in risposta alla tua domanda:

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

Grazie per la risposta. In realtà ho seguito lo stesso percorso ma percorso diverso: myTable.Schema = "MySchema" La struttura della tabella stessa viene determinata al volo mediante l'analisi di uno schema XML. –

1

Non potresti semplicemente avvolgere la sua dichiarazione DROP TABLE in un blocco try/catch, e scartare gli eventuali errori che si verificano?

In ogni caso, l'SQL per determinare se una tabella esiste è:

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

Va contro i miei errori utilizzare gli errori per il controllo del flusso del programma. Grazie per la risposta. –

+1

Bene, non potresti usare gli IF EXISTS che ho fornito per controllare prima, se non ti piace il Try/Catch? –

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

db = server.Databases["YourFavDB"]; 

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

L'unico a rispondere alla domanda e non un singolo upvote fino ad ora. C'è qualche giustizia in SO? – MrTelly

+0

Non si fa menzione dello schema qui. Potrebbe essere completamente ragionevole o pericoloso assumere lo schema dbo, a seconda dell'ambiente – Davos

+0

Buona risposta, penso che DropIfExists() sarebbe meglio – Thunderchild

3

penso che l'approccio migliore sarebbe:

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

Questa dovrebbe essere la risposta accettata a questa domanda. –

Problemi correlati