Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   crear tabla si no existe (https://www.clubdelphi.com/foros/showthread.php?t=51903)

Milperrimo 03-01-2008 17:45:19

crear tabla si no existe
 
Saludos, he estado buscando por mas de 1 hora como hacer la sentecia de que si no existe una tabla la crea, no encontre nada absolutamente asi que acudo a ustedes companeros, me encontre con la siguiente:

Código SQL [-]
IF NOT EXISTS (select 1 from RDB$RELATIONS where RDB$RELATION_NAME='MOVTO')
THEN
     CREATE TABLE MOVTO (
              IDMOVI INTEGER,
              ADESC VARCHAR(25));
END IF;

Pero no funciona, alguien sabe como le puedo hacer?????

javier7ar 04-01-2008 01:28:47

Tenes que ver donde guarda interbase la informacion de las tablas que creas, quizas le estas errando en eso. No uso interbase, pero en SQL Server esta info esta en la tabla sysobjects, entonces si no esta la entrada en esa tabla, es porque la tabla no existe. Te pongo el codigo de SQL Server:

Código SQL [-]
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[MOVTO]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
CREATE TABLE [dbo].[MOVTO] (
    [IDMOVI] [int] NOT NULL ,
    [ADESC] [varchar](25) NOT NULL 
) ON [PRIMARY]
end

P/D: no tenes una herramienta para generar el script de un tabla ?? porque generalmente esas herramientas cuando generan el sql de un tabla primero preguntan si la tabla existe y la borran para volver a crearla, de ahi podes robar el codigo para preguntar si existe la tabla o no.
Espero te sirva
Saludos

Milperrimo 04-01-2008 04:04:49

buen dato, voy a checarle, gracias

RONPABLO 04-01-2008 05:27:50

La siguiente sentencia crea la tabla si no existe, de lo contrario la altera y si no hay cambios pues no hace nada en ella, depronto le puede servir

Código SQL [-]
RECREATE TABLE MOVTO (
              IDMOVI INTEGER,
              ADESC VARCHAR(25));

jachguate 04-01-2008 05:29:34

el SQL de interbase/firebird no soporta bloques condicionales. Estos si están soportados en PSQL, pero por ahora, no te quedaría de otra que crear un stored procedure.

Mi opinión personal es que regularmente nunca necesitas realizar este tipo de chequeos en un script, siempre que seas ordenado.

Hasta luego.

;)

jachguate 04-01-2008 05:31:31

Cita:

Empezado por RONPABLO (Mensaje 255904)
La siguiente sentencia crea la tabla si no existe, de lo contrario la altera y si no hay cambios pues no hace nada en ella, depronto le puede servir

Código SQL [-]
RECREATE TABLE MOVTO (
              IDMOVI INTEGER,
              ADESC VARCHAR(25));

Muy buena.!!! :D:D:D
Esta si no la conocía... supongo que la pasé por alto en los release notes. La he probado contra firebird 2.0 y funciona. ¿a partir de que versión está disponible?

Hasta luego.

;)

RONPABLO 04-01-2008 06:22:12

Desde firebird 1.5 xD

RONPABLO 04-01-2008 06:26:31

aclaro que fui muy corto en mi respuesta anterior, la he probado en la versión 1.5 y funciona bien, la encontré una vez que veía los ddl que genera el DataBase WorckBench, seria bueno probarla en versiones anteriores y hasta en InterBase

jachguate 04-01-2008 06:45:40

Ves por que te digo que no hacía falta una instrucción como esa...

Hace mucho existe y no me dí cuenta porque nunca la necesité...


La franja horaria es GMT +2. Ahora son las 19:16:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi