PDA

Ver la Versión Completa : crear tabla si no existe


Milperrimo
03-01-2008, 17:45:19
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:

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:


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


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
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


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é...