FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Consulta en orden en el que se insertaron
Buenas,
¿como podría obtener en MSSQL las filas de unas consulta ordenadas por el orden que se insertaron a la tabla, sin usar tablas temporales ni añadir nuevos campos a la tabla?. Gracias!! |
#2
|
||||
|
||||
Para asegurarte lo más sencillo sería tener un campo TimeStamp que se rellenara de forma automática a la hora de insertar registros.
El problema es que en los SGBD's no se si tienes esa posibilidad.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
No puedo alterar la estructura de la tabla, ese es el problema.
|
#4
|
||||
|
||||
Pues no se si vas a poder obtenerlos.
Tal vez dependerá de cómo esté definida. PK, índices,...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Por PK esta complicado porque es un campo char, si fuera un autoincrement la cosa estaría más fácil. ¿A nivel interno de MS SQL existe algo?. Yo es que desconozco bastante este SGBD. El problema es que no puedo alterar la estructura de la tabla a ser ajena a mi aplicación y su respectiva licencia, etc.
|
#6
|
||||
|
||||
No es posible, puede haber índices o claves PK definidas pero ninguno te garantiza que veas la tabla en el orden preciso en que fueron insertados los registros a menos que exista un campo timestamp. Por lo regular es una buena práctica incluir un campo de este tipo precisamente para casos como el que indicas pero no todos lo realizan. Mencionas algo de licencias, la licencia no cubre ni puede cubrir el uso que tu le quieras dar a las tablas por lo que podrías añadir lo que necesites sin violar nada. Otra cosa que puedes hacer es crear un trigger que cada vez que se inserte un registro en la tabla que te interesa, registre el dato en otra tabla, de esta forma no modificas la estructura de la tabla con "licencia", pero obviamente eso solo te funcionará para los nuevos registros.
Por otro lado verifica la estructura de la tabla, muchos desarrolladores meten campos clave que sirven precisamente para poder saber el orden de inserción, igual y si la pones aquí te podemos ayudar.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#7
|
||||
|
||||
Hola Pedrote,
Yo utilizo SQL SERVER y si hay un campo definido como IDENTITY, ya lo tienes resuelto, sino es así, algún otro campo como IDCLIENTE, IDARTICULO, IDPEDIDO, etc... Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#8
|
||||
|
||||
oldbeup, esos campos no le sirven a nuestro amigo pues no indican el orden temporal en que se añaden los registros, es decir, solo indican la secuencia que siguen pero nada impide que primero añadas las claves en diferente momento, por ejemplo digamos que el campo IDCLIENTE sea la clave principal (e incluso puede ser autoincrementada).
Son sentencias totalmente válidas y no viola los índices, por lo que hal hacer un
Obtenemos:
Lo cual es correcto de acuerdo con la clave de la clave primaria, pero no es el orden en que fueron insertados los registros. Otra solución es no usar una clave primaria y utilizar índices de esta forma teóricamente al ejecutar la misma sentencia "select * from" obtendriamos tal y como fueron insertados, pero de nuevo, no hay garantía de que sea real
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#9
|
||||
|
||||
Cita:
Perdona que discrepe, pero si tiene un campo definido como IDENTITY que es autoincremental, ya tienes el orden de como se metieron, porque tú no puedes manipular un IDENTITY a menos que lo desactives. Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#10
|
||||
|
||||
Cita:
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#11
|
|||
|
|||
No esta definido como bien dice AzidRain, además el problema es que esta base de datos se encuentra en producción y la alternativa a alterar la estructura de la tabla, añadir una nueva tabla o trigger no me valdría con los registros actuales.
|
#12
|
||||
|
||||
Lo que requieres no es posible si no cuentas ya con un campo de fecha y hora de inserción, lo de modificar la tabla yo me lo pensaría, por que todo, absolutamente todo es suceptible de mejorar y o modificar, yo de ti le adiciono un campo de tipo DateTime con valor predefinido GETDATE() y que sea Nullable y luego poner los valores existentes de nullos a un fecha y hora específica, si bien el cambio no aplicaría para los registros viejos que no saldrían en el orden que se insertaron, para los nuevos funcionaría perfectamente.
__________________
mas confundido que Garavito el día del Niño. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Orden formularios | newtron | Varios | 74 | 15-03-2013 09:38:57 |
ayuda con sql insertaron codigo malicioso en mi bd | xiberclark | SQL | 6 | 02-08-2010 18:38:42 |
Orden de eventos | drykea | OOP | 5 | 27-04-2007 17:47:00 |
Consulta SQL para cambiar el orden natural de los campos de una tabla | txemag | Firebird e Interbase | 4 | 23-07-2004 19:15:08 |
Consulta por orden de parte Expediente | Franklim | SQL | 12 | 19-05-2004 21:11:26 |
|