Discussion:
detectar si una tabla existe
(demasiado antiguo para responder)
javito
2009-12-01 14:16:26 UTC
Permalink
quiero hacer una aplicación que detecte la existencia de una tabla en el
origen de datos, y si no existe la crea con DDL, pero que orden le puedo dar
al origen da datos para saber si existe o no.

un saludo
Alberto Poblacion
2009-12-01 15:01:38 UTC
Permalink
Post by javito
quiero hacer una aplicación que detecte la existencia de una tabla en el
origen de datos, y si no existe la crea con DDL, pero que orden le puedo dar
al origen da datos para saber si existe o no.
¿El origen de datos es alguno en concreto? Por ejemplo, si es sql
server, puedes saber si una tabla existe mediante el correspondiente "Select
... from sys.objects where...".

Si quieres un mecanismo universal, puedes emplear OleDb para ejecutar el
método GetOleDbSchemaTable del OleDbConnection, que con los parámetros
adecuados te permite saber qué tablas existen (y por lo tanto determinar si
la que tú quieres existe).
javito
2009-12-01 15:58:19 UTC
Permalink
Alberto es Sql Server 2005, y conozco la sentencia pero mi duda es, que tipo
de consulta le debo hacer ¿ una ExecuteScalar ? y que devuelve la sentencia
o simplemente la recojo como objeto con el Scalar y compruebo si el objeto
es nulo.

un saludo
Post by Alberto Poblacion
Post by javito
quiero hacer una aplicación que detecte la existencia de una tabla en el
origen de datos, y si no existe la crea con DDL, pero que orden le puedo dar
al origen da datos para saber si existe o no.
¿El origen de datos es alguno en concreto? Por ejemplo, si es sql
server, puedes saber si una tabla existe mediante el correspondiente
"Select ... from sys.objects where...".
Si quieres un mecanismo universal, puedes emplear OleDb para ejecutar el
método GetOleDbSchemaTable del OleDbConnection, que con los parámetros
adecuados te permite saber qué tablas existen (y por lo tanto determinar
si la que tú quieres existe).
Alberto Poblacion
2009-12-01 22:22:24 UTC
Permalink
Post by javito
Alberto es Sql Server 2005, y conozco la sentencia pero mi duda es, que
tipo de consulta le debo hacer ¿ una ExecuteScalar ? y que devuelve la
sentencia o simplemente la recojo como objeto con el Scalar y compruebo si
el objeto es nulo.
Bueno, si usas una sentencia como esta:

SELECT COUNT(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'MiTabla') AND
type in (N'U')

entonces puedes ejecutarla con un ExecuteScalar, y te devolverá 1 si la
tabla existe o 0 si no existe.

Otra alternativa: dices que lo que quieres es detectar si existe, y si no
existe, crearla con DDL. En este caso, lo puedes hacer todo de golpe en una
sola sentencia, que puedes lanzar con un ExecuteNonQuery:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'MiTabla') AND type in (N'U')) CREATE TABLE MiTabla (....)
Javito
2009-12-01 22:47:42 UTC
Permalink
Gracias Alberto lo voy a probar
Post by Alberto Poblacion
Post by javito
Alberto es Sql Server 2005, y conozco la sentencia pero mi duda es, que
tipo de consulta le debo hacer ¿ una ExecuteScalar ? y que devuelve la
sentencia o simplemente la recojo como objeto con el Scalar y compruebo
si el objeto es nulo.
SELECT COUNT(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'MiTabla')
AND type in (N'U')
entonces puedes ejecutarla con un ExecuteScalar, y te devolverá 1 si la
tabla existe o 0 si no existe.
Otra alternativa: dices que lo que quieres es detectar si existe, y si
no existe, crearla con DDL. En este caso, lo puedes hacer todo de golpe en
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'MiTabla') AND type in (N'U')) CREATE TABLE MiTabla (....)
Javito
2009-12-02 01:11:04 UTC
Permalink
Gracias Alberto funciona muy bien
un saludo
Post by Alberto Poblacion
Post by javito
Alberto es Sql Server 2005, y conozco la sentencia pero mi duda es, que
tipo de consulta le debo hacer ¿ una ExecuteScalar ? y que devuelve la
sentencia o simplemente la recojo como objeto con el Scalar y compruebo
si el objeto es nulo.
SELECT COUNT(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'MiTabla')
AND type in (N'U')
entonces puedes ejecutarla con un ExecuteScalar, y te devolverá 1 si la
tabla existe o 0 si no existe.
Otra alternativa: dices que lo que quieres es detectar si existe, y si
no existe, crearla con DDL. En este caso, lo puedes hacer todo de golpe en
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'MiTabla') AND type in (N'U')) CREATE TABLE MiTabla (....)
Loading...