Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

averiguar con sql si una tabla existe

Estas en el tema de averiguar con sql si una tabla existe en el foro de SQL Server en Foros del Web. buenos días: es posible, y si es así, como se puede interrogar a la DB con sql para averiguar si una tabla existe ? salu2....
  #1 (permalink)  
Antiguo 27/02/2007, 06:47
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 9 meses
Puntos: 2
averiguar con sql si una tabla existe

buenos días:

es posible, y si es así, como se puede interrogar a la DB con sql para averiguar si una tabla existe ?

salu2.
  #2 (permalink)  
Antiguo 27/02/2007, 08:26
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: averiguar con sql si una tabla existe

Hola

Bueno, pues mira, puedes hacer lo siguiente:

estando en sql usas la sentencia

desc Tabla;

Si la tabla existe te aparece la descripcion de la tabla con nombres de campos, tipo y tamaño de los campos.

Si no existe, muestra este error:

ERROR 1146 (42502) : Table 'basededatos.tabla' doesn't exist

Espero te sirva, suerte.
  #3 (permalink)  
Antiguo 27/02/2007, 08:28
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: averiguar con sql si una tabla existe

cuando generas el script de creacion de una tabla el sql te lo proporciona...
Código:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblMiTabla]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
AccionAtomar....

GO
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 27/02/2007, 11:18
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 9 meses
Puntos: 2
Re: averiguar con sql si una tabla existe

buenas tardes:

utilizo ASP, de esta forma:

sqlcre = "create table campa . . . . . . . . . . )";
CONN = Server.CreateObject("ADODB.Connection")
CONN.ConnectionString = "dRIVER=SQL Server;UID= . . . . . . . . . . . "
CONN.open

no se muy bien como encajar la consulta:

sería así :

sqlsel ="select * from dbo.sysobjects where id = object_id(N'[dbo].[campa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)"

rs = Server.CreateObject("ADODB.RecordSet");
var adOpenKeySet = 1;
var adLockReadOnly = 1;
rs.Open(sqlsel,CONN,adOpenKeySet,adLockReadOnly);

if (rs.EOF){
CONN.Execute(sqlcre);}

salu2. gracias.

Última edición por evoarte; 27/02/2007 a las 12:54
  #5 (permalink)  
Antiguo 27/02/2007, 12:39
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: averiguar con sql si una tabla existe

lo mejor es que lo realices dentro de un stored procedure....
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 27/02/2007, 15:19
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: averiguar con sql si una tabla existe

Hola

Bueno, pues no veo porque no usar el desc Table, asi el devuelve si existe o no la tabla!!!

suerte
  #7 (permalink)  
Antiguo 27/02/2007, 16:46
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: averiguar con sql si una tabla existe

desde donde ejecutas esa operacion??

desc table...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #8 (permalink)  
Antiguo 27/02/2007, 18:07
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: averiguar con sql si una tabla existe

Hola

pues lo haces como si fueras a hacer un select, es lo mismo

O bueno, hacerlo con select

Código PHP:
<?
//con desc
$qu mysql_query("desc autos");
//con select
$qu mysql_query("select * from autos");
//autos  no existe
if(empty($qu))
{
echo 
mysql_error();
//Imprime Table 'nombrebasedatos.nombretabla' (en este caso autos) doesn't exist
}
?>
Asi propongo,
Suerte
  #9 (permalink)  
Antiguo 28/02/2007, 08:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Información Re: averiguar con sql si una tabla existe

Bueno, te comento que no es recomendable realizar acciones a base de excepciones, es decir, esperando que ocurra un error para tomar una accion en el flujo del proceso. Lo mejor es hacerlo con instrucciones validas.

Por otro lado, la instruccion que propones es de MySQL (corrigeme si estoy equivocado), y en SQL Server no existe.

En SQL Server una buena forma de hacerlo es con el query que comente anteriormente, incluyendolo en un stored procedure. Posiblemente no te funcione en MySQL ya que se accede a tablas de sistema de la base de datos.

un saludo
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #10 (permalink)  
Antiguo 28/02/2007, 09:00
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: averiguar con sql si una tabla existe

Lo mejor siempre será hacerle un select a la tabla sysobjects y preguntar si existe la tablita. Como que se tiene mayor control, de otra forma estás forzando a que ocurran excepciones y trabajar en base a ellas, y esa no es la naturaleza de las excepciones
  #11 (permalink)  
Antiguo 28/02/2007, 09:24
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: averiguar con sql si una tabla existe

Hola

Bueno, pues la excepción precisamente solo se da cuando se debe dar, en caso contrario no se ejecutara, asi que no le veo problema, de otra forma para que las excepciones..

y en efecto, yo hablo de mysql, en sql server esa info esta en sysobject y syscolumns, y se podria entonces crear una vista usando el id como link y listo

Suerte
  #12 (permalink)  
Antiguo 28/02/2007, 15:15
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 9 meses
Puntos: 2
Re: averiguar con sql si una tabla existe

buenas noches:

funciona OK, como indica andres95, la opción de la excepción no la he probado.

gracias.
salu2.
  #13 (permalink)  
Antiguo 03/03/2007, 05:30
 
Fecha de Ingreso: enero-2004
Mensajes: 310
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: averiguar con sql si una tabla existe

Utiliza la forma que te dice Developer9, es la correcta forma de realizar las cosas...
Trabajar bajo excepciones es feo y totalmente incorrecto, y con lo que te supone ir creando excepciones en el servidor...
__________________
Un saludo,
Trucos
Videos
  #14 (permalink)  
Antiguo 05/03/2007, 11:05
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: averiguar con sql si una tabla existe

Usar querys directos a tablas de sistema, como sysobjects no es lo correcto, es más, en SQL Server 2005 ni siquiera está permitido.

Tienes 2 maneras correctas de averiguarlo:

1) SELECT * FROM information_schema.tables WHERE table_name = 'mitabla'
2) SELECT Object_Id('mitabla')

Aunque el punto 2 busca cualquier objeto que tenga ese nombre, no necesariamente una tabla.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #15 (permalink)  
Antiguo 05/03/2007, 12:51
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: averiguar con sql si una tabla existe

Una pregu, information_schema.tables es una tabla de usuario?
  #16 (permalink)  
Antiguo 08/03/2007, 10:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: averiguar con sql si una tabla existe

Nop, es un view de sistema. Los information_schema son un estándar de SQL ANSI (aunque no sé de qué año de ANSI).
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #17 (permalink)  
Antiguo 08/03/2007, 11:48
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: averiguar con sql si una tabla existe

que paciencia my friend...


(tu me entiendes...)
sorry offtopic pero luego no me puedo contener.. jaja
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #18 (permalink)  
Antiguo 08/03/2007, 13:36
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: averiguar con sql si una tabla existe

Orale Rootk, como así por esta zona...

Ya le heché un ojo al information_schema.tables

Oigan pero si le puedo hacer select's a tablas del sistema

Ejecuten select * from dtproperties, select * from spt_monitor y si funka
  #19 (permalink)  
Antiguo 08/03/2007, 16:56
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: averiguar con sql si una tabla existe

De que se puede se puede, pero no es lo correcto. Además, supongo que eso es en v2000, porque por lo que he leído, en v2005 ya no lo puedes hacer, para eso tienes los nuevos views sys.*
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #20 (permalink)  
Antiguo 09/03/2007, 07:46
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: averiguar con sql si una tabla existe

Hombre lo hice en sql 2005... han fallado tus teorías

Wueno ya echamos mucha lata, nos vemos a la proxima
  #21 (permalink)  
Antiguo 09/03/2007, 10:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: averiguar con sql si una tabla existe

Cita:
Iniciado por Mithrandir
PD. El select que pusiste no jala,
mmm, si te refieres a esta:
SELECT CONVERT(DATETIME,'2005-03-17',103)
a mi me funcion, bueno, con la aclaración previa de que en 2005 no me respeta el formato aaaa-MM-dd

tengo que hacer ésto:
SELECT CONVERT(DATETIME,'20050317',103)

Cita:
Iniciado por Mithrandir
Eso definitivamente habrá que discutirlo con una buenas birras de por medio
pues a mi pesar te las acepto, al fin ya mañana termino mi curso para la prox semana discutirlo con unas bien frías no.?? jejeje
  #22 (permalink)  
Antiguo 10/03/2007, 22:28
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: averiguar con sql si una tabla existe

...................
  #23 (permalink)  
Antiguo 11/03/2007, 12:19
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: averiguar con sql si una tabla existe

¿Es mi imaginación o el incio de la discusión con RootK desapareció?

SELECT CONVERT(DATETIME,'2005-03-17',103)

Eso tampoco corre en v2000 (al menos no en el mío), según yo el 103 está sobrando.

Cita:
Iniciado por Developer9 Ver Mensaje
Hombre lo hice en sql 2005... han fallado tus teorías
Bueno saberlo, todas las lecturas que he hecho comentan que ya no se dejarían hacer los querys directamente en las tablas de sistema.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #24 (permalink)  
Antiguo 12/03/2007, 10:57
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: averiguar con sql si una tabla existe

Cita:
Iniciado por Mithrandir
Eso tampoco corre en v2000 (al menos no en el mío), según yo el 103 está sobrando.
totalmente de acuerdo, el problema es que no sé en que estaba pensando cuando te puse eso.. (no creo que sea por unas birras que traía encima jeje) mas bien lo que algunas veces hacía era:

select convert(datetime,'17-03-2005',103)

es decir, mandaba la fecha en formato dd-MM-yyyy y el 103 era el que me regresaba el tipo que necesitaba

pero ya para el formato universal se puede hacer de cualquiera de las siguientes formas:

Cita:
select cast('2005-03-17' as datetime) --yyyy-MM-dd
select cast('20050317' as datetime) --yyyyMMdd
select convert(datetime,'20050317',103) --yyyyMMdd
saludos y por aqui nos veremos pronto friend, hay me hechas un phone...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:22.