2009-01-10 22 views
16

Sé que esto es similar a this question, pero estoy usando SQL Server CE 3.5 con un proyecto de WinForms en C#. ¿Cómo puedo determinar si existe una tabla? Sé que la palabra clave IF no es compatible, aunque EXISTS es. ¿Information_schema existe en CE donde puedo consultar contra él? Gracias.¿Determina si la tabla existe en SQL Server CE?

+0

pensé que tenía una aplicación ingeniosa de código justo lo que se necesitaba para esto, pero no funciona para mí. Publiqué una pregunta diesbezueglich en: http://social.msdn.microsoft.com/Forums/en-US/8ee6aefa-e47b-4f0c-8735-120b8bf041ec/why-is-my-sqlserver-ce-code-failing (Intenté publicarlo en codeproject, pero me congeló varias veces) –

+0

La tercera vez fue un encanto: http://www.codeproject.com/Questions/629607/Why-is-my-SQLServer-CE-code- fracasando Sí, lo crucé, pero a dos foros diferentes, así que con suerte eso no se considera disparatado. –

Respuesta

34

Sí, sí que existe:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME = 'TableName' 
+0

No sería "SELECCIONAR COUNT (ID)" más fácil y un poco más eficiente (en caso de que la tabla sea ancha (muchas columnas) o alta (muchas filas)? –

+0

Realmente depende de cómo quiera codificarla. solo quieres verificar la existencia, entonces sí. Solo quería demostrar que INFORMATION_SCHEMA.TABLES está disponible se puede consultar. El resto es SQL básico. –

+0

@MehrdadAfshari Go Persians !! –

1

Como alternativa, se puede consultar la tabla y coger la excepción lanzada. Si hay una excepción, no se encontró la tabla; de lo contrario, existe la tabla.

SELECT TOP 1 1 FROM TableName; 

Una prueba de rendimiento pequeña y simple tuvo mejores resultados que la consulta contra INFORMATION_SCHEMA. Aunque consideraría una consulta contra INFORMATION_SCHEMA como más limpia.

+0

Si la tabla no existe, ese método lanza una excepción, por lo que no debes hacer eso: atrapar una excepción nunca es el camino a seguir cuando hay una alternativa limpia. –

0

Usando ayudante Base de datos:

var db = Database.Open("MyDatabase"); 
var sql = @"SELECT Count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MyTable'" 
var count = db.QueryValue(sql); 
if(count.Equals(1)){ 
    //table exists 
} 
Cuestiones relacionadas