Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-12-2012
Pedrote Pedrote is offline
Miembro
 
Registrado: dic 2007
Posts: 35
Poder: 0
Pedrote Va por buen camino
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!!
Responder Con Cita
  #2  
Antiguo 20-12-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 20-12-2012
Pedrote Pedrote is offline
Miembro
 
Registrado: dic 2007
Posts: 35
Poder: 0
Pedrote Va por buen camino
No puedo alterar la estructura de la tabla, ese es el problema.
Responder Con Cita
  #4  
Antiguo 20-12-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #5  
Antiguo 20-12-2012
Pedrote Pedrote is offline
Miembro
 
Registrado: dic 2007
Posts: 35
Poder: 0
Pedrote Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 20-12-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #7  
Antiguo 21-12-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
Responder Con Cita
  #8  
Antiguo 22-12-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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).

Código SQL [-]
INSERT INTO CLIENTES SET IDCLIENTE=3;
       INSERT INTO CLIENTES SET IDCLIENTE=2;
       INSERT INTO CLIENTES SET IDCLIENTE=1;
Son sentencias totalmente válidas y no viola los índices, por lo que hal hacer un
Código SQL [-]
  SELECT * FROM CLIENTES;

Obtenemos:
Código SQL [-]
----IDCLIENTE----
       1
       2
       3
-----------------

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||
Responder Con Cita
  #9  
Antiguo 23-12-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por AzidRain Ver Mensaje
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).

Código SQL [-]
INSERT INTO CLIENTES SET IDCLIENTE=3;
       INSERT INTO CLIENTES SET IDCLIENTE=2;
       INSERT INTO CLIENTES SET IDCLIENTE=1;
Son sentencias totalmente válidas y no viola los índices, por lo que hal hacer un
Código SQL [-]
  SELECT * FROM CLIENTES;

Obtenemos:
Código SQL [-]
----IDCLIENTE----
       1
       2
       3
-----------------

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
Hola AzidRain,

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.
Responder Con Cita
  #10  
Antiguo 25-12-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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.
Y si no lo tiene definido? como parece es el caso...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #11  
Antiguo 26-12-2012
Pedrote Pedrote is offline
Miembro
 
Registrado: dic 2007
Posts: 35
Poder: 0
Pedrote Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 26-12-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cita:
Empezado por Pedrote Ver Mensaje
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.
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 12:30:27.


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
Copyright 1996-2007 Club Delphi