Me estoy peleando en como hacer para insertar un registro en medio de una tabla.
Suponiendo que tengo una tabla con 11 registros
id cod descripcion
1 110 Pepe
2 111 Pepa
3 121 Juan
4 122 Juana
5 131 Jose
6 141 Emilio
7 142 Emilia
8 151 Fernando
9 152 Fernanda
10 161 Mario
11 162 Maria
Bien, EN ORDEN NATURAL de creación de la Tabla, quiero añadir un registro, cod 132 y descripción Josefa
Como puedo hacer para insertar un registro y que los registros por debajo del id 5 se "corran" una posición para que pueda poner el valor de ese nuevo registo en el id 6 ???
No se si me explico.
En una o varias sentencias Execute() algo así como...
INSERT INTO mitabla (cod,descripcion) VALUES ('000','nuevo'')
UPDATE mitabla SET cod = cod_registro_anterior, descripcion = descripcion_registro_anterior WHERE id > 5
y luego ya hacer
UPDATE mitabla SET cod = '132', descripcion = 'Josefa' WHERE id = 6
Alguien puede hecharme una mano ???
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Añadir un registro
Añadir un registro
Un Saludo,
Xevi.
Xevi.
Re: Añadir un registro
Xevi,
UPDATE mitabla SET cod=cod+1 WHERE cod>=132
INSERT INTO mitabla (cod,descripcion) VALUES (132,'Josefa')
UPDATE mitabla SET cod=cod+1 WHERE cod>=132
INSERT INTO mitabla (cod,descripcion) VALUES (132,'Josefa')
Re: Añadir un registro
Gracias José,
De la manera que propones, el registro 6 Josefa se añadirà al final de la Tabla, con el id 12... no???
No es así... yo quiero que el id 12 tome los datos del registro del id 11, los del 11 los tome del 10... i así hasta el 6
Y el id 6 hago el UPDATE con los datos del registro 132 Josefa
El resultado final que deseo obtener, es el orden "natural" de la tabla de esta forma
id cod descripcion
1 110 Pepe
2 111 Pepa
3 121 Juan
4 122 Juana
5 131 Jose
6 132 Josefa
7 141 Emilio
8 142 Emilia
9 151 Fernando
10 152 Fernanda
11 161 Mario
12 162 Maria
Gracias por vuestro tiempo.
De la manera que propones, el registro 6 Josefa se añadirà al final de la Tabla, con el id 12... no???
No es así... yo quiero que el id 12 tome los datos del registro del id 11, los del 11 los tome del 10... i así hasta el 6
Y el id 6 hago el UPDATE con los datos del registro 132 Josefa
El resultado final que deseo obtener, es el orden "natural" de la tabla de esta forma
id cod descripcion
1 110 Pepe
2 111 Pepa
3 121 Juan
4 122 Juana
5 131 Jose
6 132 Josefa
7 141 Emilio
8 142 Emilia
9 151 Fernando
10 152 Fernanda
11 161 Mario
12 162 Maria
Gracias por vuestro tiempo.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9121
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Añadir un registro
Buenos días,
Muy mala idea lo del orden natural. Eso no existe en SQL. Si quieres tener una ordenación por registro de entrada, pon un timestamp.
Es muy probable que el motor utilice mecanismos de recuperación de registros borrados o sencillamente de reetructuración de la tabla en base a su clave primaria y tu ordenación natural se vaya al traste.
Un saludo
Muy mala idea lo del orden natural. Eso no existe en SQL. Si quieres tener una ordenación por registro de entrada, pon un timestamp.
Es muy probable que el motor utilice mecanismos de recuperación de registros borrados o sencillamente de reetructuración de la tabla en base a su clave primaria y tu ordenación natural se vaya al traste.
Un saludo
Re: Añadir un registro
Al final, como lo necesito si o si "orden natural", por compatibilidad con otras funciones que utilizo...
Si hay alguna solución/aporte que se pueda mejorar, agradeceria cualquier sugerencia.
De momento, me vale/sirve de esta forma.
Gracias por vuestro tiempo.
Código: Seleccionar todo
aItems := :QueryArray( "SELECT cod,descripcion FROM miBBDD.miTabla;" )
HB_AIns( aItems, 6, { 132, 'Josefa' }, .T. )
For n:=1 TO Len(aItems)
cValues += IF( n>1, ",", "" ) + Chr(10) + "(" + aItems[n,2] + ", '" + aItems[n,3] ")"
Next
:Execute( "TRUNCATE miBBDD.miTabla;" )
:Execute( "INSERT INTO miBBDD.miTabla (cod,descripcio) VALUES " + cValues )
De momento, me vale/sirve de esta forma.
Gracias por vuestro tiempo.
Un Saludo,
Xevi.
Xevi.
Re: Añadir un registro
Como te ha dicho Ignacio, el "orden natural" no existe en SQL. Es más, ese "orden natural" rompe uno de los principìos del modelo relacional de bases de datos.XeviCOMAS escribió:Al final, como lo necesito si o si "orden natural", por compatibilidad con otras funciones que utilizo...
Si lo que necesitas es un campo al estilo de los recno() de los DBF, lo que puedes hacer es crear un campo autoincremental. En el caso de SQLite, ya existe uno por defecto, que se llama _RowId_, y en MariaDB lo puedes crear tú muy fácilmente.