2009-05-29 10 views
6

Estoy tratando de buscar una tabla SQL por nombre y, si existe, colóquela. Todo esto debe hacerse en C# usando SMO.Comprobando y soltando una tabla existente a través de C# y SMO

Para complicarlo un poco más, la tabla también tiene un esquema distinto a "dbo".

Ultimamente, la tabla se recreará a través de SMO (tengo este funcionamiento), pero tengo que asegurarme de que no esté allí antes de que pueda volver a crearlo.

Todos los ejemplos que he visto parecen estar creando y soltando la tabla todo en el mismo contexto. En mi caso, la tabla se habrá creado y poblado en una sesión anterior.

Respuesta

0

La primera pregunta es, ¿por qué no se puede soltar y volver a crear con DDL?

Y en respuesta a su pregunta:

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

Gracias por su respuesta. De hecho, he bajado por la misma ruta, pero diferente: myTable.Schema = "MySchema" La estructura de la tabla en sí misma se determina sobre la marcha mediante el análisis de un esquema XML. –

1

no Podrías envolver su declaración DROP TABLE en un bloque try/catch, y descartar los errores que se producen?

De todos modos, el SQL para determinar si existe una tabla es:

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

Va contra mi grano usar errores para el control de flujo del programa. Gracias por la respuesta. –

+1

Bueno, ¿no podría usar los IF EXISTS que proporcioné para verificar primero, si no le gusta Try/Catch? –

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

db = server.Databases["YourFavDB"]; 

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

El único que ha respondido la pregunta y ningún votaciones únicas hasta ahora. ¿Hay justicia en SO? – MrTelly

+0

No hay mención de esquema aquí. Podría ser completamente razonable o peligroso suponer que el esquema es dbo, dependiendo de su entorno – Davos

+0

Buena respuesta, creo que DropIfExists() sería mejor – Thunderchild

3

creo que el mejor enfoque sería:

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

Esta debería ser la respuesta aceptada a esta pregunta. –

Cuestiones relacionadas