Me parece que el tema no pasa por ahí...
Imagino que estás grabando el id con un campo identity, y de allí tu
problema.
Lo que tenés que hacer es "capturar" el valor del Id que se insertó en una
variable, escribiendo
SET @variable = @@Identity
inmediatamente después del INSERT, y después usarla en los otros insert.
También existe la función IDENT_CURRENT('table_name') que te devuelve el
último valor de identidad generado para esa tabla. Nunca la usé...
Otra opción es deshabilitar los campos identity de las tablas destino, y
usar los valores de id existentes en la tabla origen, así te quedan
exactamente iguales.
Esto se hace con SET IDENTITY_INSERT ON tutabla ON
Saludos,
Ana.
_____
De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Leandro
Halfon
Enviado el: Lunes 28 de Enero de 2008 15:57
Para: [email protected]
Asunto: [puntonet] [OT] SQL cursores anidados.
y como se hace eso ? jeje
gracias!!
2008/1/28, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
deshabilitá los constraints
----- Original Message -----
From: Leandro Halfon <mailto:[EMAIL PROTECTED]>
To: [email protected]
Sent: Monday, January 28, 2008 3:28 PM
Subject: [puntonet] [OT] SQL cursores anidados.
Lista.. a ver si algun grosso en sql me puede ayudar
tengo que duplicar totalmente los datos de un bd..
pero como algunas tablas estan relacionados..tengo que usar cursores...
hice un script para duplicar los datos de 2 tablas..
el scripts es el siguiente:
/*declaramos las variables para tabla menu*/
declare @idmenu as int
declare @tipomenu as int
declare @nombre as varchar(50)
declare @descripcion as varchar(300)
declare @orden as int
declare @idmenupadre as int
declare @publicado as bit
declare @imagen as varchar(80)
declare @alineacion as int
/*declaramos las variables para tabla menu_idiomas */
declare @texto as varchar(150)
declare @eslinkexterno as bit
declare @urlexterno as varchar(250)
declare @estargetself as bit
declare @estargetblank as bit
declare @espopup as bit
declare @width as int
declare @heigth as int
/*declaramos los cursores. El select debe contener sólo los campos a
utilizar.*/
declare MENU cursor for
select IdMenu,TipoMenu,
Nombre,Descripcion,OrdenMenu,IdMenuPadre,Publicado,Imagen,Alineacion
from ocms_menues where idsitio=5 and tipomenu=3
open MENU
/*Avanzamos un registro y cargamos en las variables los valores encontrados
en el primer registro*/
fetch next from MENU into
@idmenu,@tipomenu,@nombre,@descripcion,@orden,@idmenupadre,@publicado,@image
n,@alineacion
while @@fetch_status = 0
begin
/*Insertamos el nuevo menu*/
insert into ocms_menues
values(@tipomenu,@nombre,@descripcion,@orden,@idmenupadre,@publicado,14,@ima
gen,@alineacion)
necesito el id que inserte para el insert que hay mas abajo...
/*Leemos el menu_idioma*/
declare MENU_IDIOMAS cursor for
select
texto,eslinkexterno,publicado,urlexterno,estargetself,estargetblank,espopup,
popupwidth,popupheigth
from ocms_menues_idiomas where [EMAIL PROTECTED]
open MENU_IDIOMAS
fetch next from MENU_IDIOMAS into
@texto,@eslinkexterno,@publicado,@urlexterno,@estargetself,@estargetblank,@e
spopup,@width,@heigth
while @@fetch_status = 0
begin
/*Insertamos el nuevo menu_idioma*/
insert into ocms_menues_idiomas
values(@texto,@eslinkexterno,@publicado,@urlexterno,@estargetself,@estargetb
lank,@espopup,@width,@heigth)
/*Avanzamos otro registro de la tabla menu_idioma*/
fetch next from MENU_IDIOMAS into
@tipomenu,@nombre,@descripcion,@orden,@idmenupadre,@publicado,@imagen,@aline
acion
end
close MENU_IDIOMAS
deallocate MENU_IDIOMAS
/*Avanzamos otro registro de la tabla menu */
fetch next from MENU into
@tipomenu,@nombre,@descripcion,@orden,@idmenupadre,@publicado,@imagen,@aline
acion
end
/*cerramos el cursor*/
close MENU
deallocate MENU
ahora bien.. en el cursor de MENU_IDIOMAS necesito insertar en valor que
hice en insert del nuevo menu.. tienen idea de como hago ?
gracias!!!
Leandro