PDA

Ver la Versión Completa : Reiniciar autonumerico SQL


jocey
11-02-2008, 20:40:00
Hola, a todos, temgo una tabla en SQL server y un campo que tiene tipo de datos Entero que se incrementa en uno, pero llego a 9999 y quisiera llevarlo a cero de nuevo para volver a empezar.... como lo hago?

enecumene
11-02-2008, 20:47:08
Solo una idea:

if SQLDataSet.Field[0].AsInteger = 9999 then
begin
Edit1.Text := '0';
End;

Aunque debo decir que debes tratar de explicar la razón del por qué quieres llevarlo 0 de nuevo, asi habra mas soluciones y una ayuda mas rapida.

Saludos.

Chris
11-02-2008, 21:11:03
Hola jocey (http://www.clubdelphi.com/foros/member.php?u=15281), realmente no sé que estoy yo haciendo acá, si de SQL server, no sé nada. Pero quisiera expresarme, haciendo unas ligeras aclaraciones.
Primero: No especificas si el campo es autonumerico, o los valores los asignas por tu propia cuenta. Estos dos escenarios tendrán dos soluciones distintas.

Por otro lado, quiero aclarar a mi apreciado amigo enecumene, que aprecio sus respuestas por la forma en que las plantea, fácil y rápido. Pero aveces se te escapan detalles o detallazos que siempre es bueno tener en cuanta y plantearlos en tus respuestas. No lo vayas a tomar a mal, enecumene. Solo es una observación que te ago. Lo digo por el código que posteastes anteriormente, que estoy casi seguro de que no funcionará a como uno lo esperaría.

Saludos.

enecumene
11-02-2008, 21:27:33
Hola jocey (http://www.clubdelphi.com/foros/member.php?u=15281), realmente no sé que estoy yo haciendo acá, si de SQL server, no sé nada. Pero quisiera expresarme, haciendo unas ligeras aclaraciones.
Primero: No especificas si el campo es autonumerico, o los valores los asignas por tu propia cuenta. Estos dos escenarios tendrán dos soluciones distintas.

Por otro lado, quiero aclarar a mi apreciado amigo enecumene, que aprecio sus respuestas por la forma en que las plantea, fácil y rápido. Pero aveces se te escapan detalles o detallazos que siempre es bueno tener en cuanta y plantearlos en tus respuestas. No lo vayas a tomar a mal, enecumene. Solo es una observación que te ago. Lo digo por el código que posteastes anteriormente, que estoy casi seguro de que no funcionará a como uno lo esperaría.

Saludos.

No te preocupes amigo D&W, no lo tomo a mal y nunca lo hare, por tanto, por algo inicié con esta oración:

Solo una idea:

o sea, era mas una idea no una solución, solo que no sabia en que sentido y como y en que momento o por donde el quiere reiniciar el conteo.

Saludos.

gendelphi
11-02-2008, 23:53:42
Una forma muy general de hacerlo sin importar que base de datos uses sería:
1. Tener una tabla desde la que obtengas el siguiente número a asignar.
2. Crear un trigger BEFORE INSERT para la tabla en la que usas el numero consecutivo. Dicho trigger es quien se encargaría de recuperar el siguiente número, asignarselo al campo que quieres, incrementar en uno el número consecutivo y verificar si ya llegó al límite, para entonces inicializarlo en 1.

No se SQL Server, pero la esencia de la idea sería algo asi:


CREATE TRIGGER establece_consecutivo FOR mi_tabla
BEFORE INSERT
AS
DECLARE VARIABLE c INTEGER;
BEGIN
SELECT siguiente
FROM tabla_contador
INTO :c;

NEW.numero_consecutovo = c;
c = c+1;
IF (c = 5000) THEN
c = 1;
UPDATE tabla_contador
SET siguiente = :c;
END

juanelo
12-02-2008, 00:44:33
No te preocupes amigo D&W, no lo tomo a mal y nunca lo hare, por tanto, por algo inicié con esta oración:



o sea, era mas una idea no una solución, solo que no sabia en que sentido y como y en que momento o por donde el quiere reiniciar el conteo.

Saludos.

No quiero entrometerme, pero voy a dar mi punto de vista: Las respuestas de Enecumene normalmente dan con una solucion acertada, pero lo que me queda mas que claro, es que el que pregunta no puede esperar que le respondan su duda cuando esta no esta correctamente planteada o de plano carece de informacion, y ah es en donde mas de acuerdo con enecumene estoy, le respondes a manera de "aproximacion" y para que se de cuenta la gente de que la respuesta normalmente va de acuerdo a la pregunta.
Saludos

Gabo
12-02-2008, 11:43:22
Hola, a todos, temgo una tabla en SQL server y un campo que tiene tipo de datos Entero que se incrementa en uno, pero llego a 9999 y quisiera llevarlo a cero de nuevo para volver a empezar.... como lo hago?

De todas formas, la pregunta no me parece tan mal planteada.

Ha dicho que es un tabla de SQL Server con tipo de dato entero, y en el título del mensaje ha puesto que es autonumérico. Lo que quiere lograr está claro, puede que hallan otros detalles que nos puedan parecer interesantes de aportar, pero me parece que ha intentado dar todos los que ha visto necesarios.

Chris
12-02-2008, 16:27:05
No quiero entrometerme, pero voy a dar mi punto de vista: Las respuestas de Enecumene normalmente dan con una solucion acertada, pero lo que me queda mas que claro, es que el que pregunta no puede esperar que le respondan su duda cuando esta no esta correctamente planteada o de plano carece de informacion, y ah es en donde mas de acuerdo con enecumene estoy, le respondes a manera de "aproximacion" y para que se de cuenta la gente de que la respuesta normalmente va de acuerdo a la pregunta.
Saludos
Juanelo, en ningún momento critique las respuestas de enecumene en forma general, hacía referencía al código que escribió al inicio de este post, que a como se lo dije, me parecería que contenía un bug. No vayas a pensar que tomo a mal el apoyo que haz dado a enecumene, tus puntos son validos, pero a como de alguna forma había dicho anteriormente, para cada escenario hay una solución distinta. Gabo mencionó que jocey (http://www.clubdelphi.com/foros/member.php?u=15281) había dado suficiente información relevante, sin embargo se le escapó algo, que fue la información que le solicité a jocey, sobre especificar si el campo era autonumerico o un entero normal al que le asigna su valor manualmente.

Obviamente, nadie está obligado acá a dar algo, ya sean ideas o soluciones, cualquiera que fuera el tipo de aporte, debemos estar contentos de participar en este maravilloso club, en la forma que sea, pidiendo o dando ayuda, que sin duda, la gran mayoría ha estado en los dos bandos, incluyendo a los más experimentados.

Nuestra voluntad de ayudar, en ningún momento, nos puede hacer pensar que deberíamos ser inmunes a la critica. Todo lo contrario, de las discusiones es que surgen las grandes ideas.

Saludos.

juanelo
12-02-2008, 17:03:41
Juanelo, en ningún momento critique las respuestas de enecumene en forma general, hacía referencía al código que escribió al inicio de este post, que a como se lo dije, me parecería que contenía un bug. No vayas a pensar que tomo a mal el apoyo que haz dado a enecumene, tus puntos son validos, pero a como de alguna forma había dicho anteriormente, para cada escenario hay una solución distinta. Gabo mencionó que jocey (http://www.clubdelphi.com/foros/member.php?u=15281) había dado suficiente información relevante, sin embargo se le escapó algo, que fue la información que le solicité a jocey, sobre especificar si el campo era autonumerico o un entero normal al que le asigna su valor manualmente.

Obviamente, nadie está obligado acá a dar algo, ya sean ideas o soluciones, cualquiera que fuera el tipo de aporte, debemos estar contentos de participar en este maravilloso club, en la forma que sea, pidiendo o dando ayuda, que sin duda, la gran mayoría ha estado en los dos bandos, incluyendo a los más experimentados.

Nuestra voluntad de ayudar, en ningún momento, nos puede hacer pensar que deberíamos ser inmunes a la critica. Todo lo contrario, de las discusiones es que surgen las grandes ideas.

Saludos.
De hecho si lo hubieras hecho creo que se vale, siempre y cuando sea de la manera correcta y constructiva. Mi comentario no iba encaminado a si lo que dijiste fue una critica o no (insiste que se vale), sino a que algunas veces la gente pregunta cosas como: "mi programa no compila, ¿que estoy haciendo mal", como puedes responder de manera directa esta pregunta?. En fin D&W, espero no hayas tomado a mal mi comentario.
Saludos.

Chris
12-02-2008, 17:30:59
De hecho si lo hubieras hecho creo que se vale, siempre y cuando sea de la manera correcta y constructiva. Mi comentario no iba encaminado a si lo que dijiste fue una critica o no (insiste que se vale), sino a que algunas veces la gente pregunta cosas como: "mi programa no compila, ¿que estoy haciendo mal", como puedes responder de manera directa esta pregunta?. En fin D&W, espero no hayas tomado a mal mi comentario.
Saludos.
No, para nada.

Lo único que no entiendo es lo que dices:
De hecho si lo hubieras hecho creo que se vale, siempre y cuando sea de la manera correcta y constructiva.
Saludos.
¿Qué hubiera hecho? :confused:

juanelo
12-02-2008, 18:21:30
No, para nada.

Lo único que no entiendo es lo que dices:

¿Qué hubiera hecho? :confused:

Que tal D&W, perdona que no haya sido especifico, me refereria a que si hubieras hecho una critica al comentario de enecumene (solo al comentario de este hilo, no en general a todos sus comentarios) no hubieras actuado mal ni mucho menos, ya que una critica bien hecha y constructiva es siempre bienvenida.

Chris
12-02-2008, 19:10:29
Que tal D&W, perdona que no haya sido especifico, me refereria a que si hubieras hecho una critica al comentario de enecumene (solo al comentario de este hilo, no en general a todos sus comentarios) no hubieras actuado mal ni mucho menos, ya que una critica bien hecha y constructiva es siempre bienvenida.
Bueno, no sé si me has mal interpretado o, seguramente fui yo quien no se dio a entender claramente. En ningún momento hice critica general a enecumene, al contrario, siempre le he notado su deseo de ayudar. :)

enecumene
12-02-2008, 19:16:43
Vale chicos, no se preocupen, como ya le habia dicho a D&W anteriormente que no lo habia tomado a mal sus comentarios y que nunca lo iba a hacer, al contrario, siempre son bienvenidas, ya sean critica o no, incluso si hubiera sido critica tampoco lo hubiese tomado a mal ya que fue constructiva y observadora, de lo contrario el asunto fuera diferente, aqui hay un dicho que dice: "DE LAS CRITICAS APRENDES y VUELVES MEJOR Y MAS FUERTE". :p;)

Saludos.

luisgutierrezb
12-02-2008, 21:50:20
para resetear la identidad en mssql


DBCC CHECIDENT ('table', RESEED, 0)


sin embargo, recuerda que si tienes este campo como llave primaria o algo asi, al resetear tendras problemas solo es cuestion de que revises bien tu diseño de bases de datos

jocey
25-02-2008, 02:21:39
como saben yo frecuento bastante este sitio, pues me encanta, y no conozco ningun otro foro que se aproxime a la calidad de este, creo que sin este foro yo seria nada, y siempre que pongo una pregunta pongo al final que me digan si no entienden lo que planteo para volverlo explicar, de todas formas mi pregunta es que tengo un servidor SQL y una tabla con un campo que es autonumerico, osea se incrementa en uno el solo, yo eso no lo controlo desde delphi, ahora quiero borrar los valores de la tabla, pero cuando comienzo a entrar valores ese campo me comineza desde el consecutivo que tenia, como hago para que el campo empiece por uno.... es verdad lo que me decian que tengo que tener cuidado pq la tabla esta relacionada y eso traeria problemas, lo se, pero es que tengo esa duda, como hago que empieze por uno?

Gracias de antemano
Saludos Jocey

danilo_candales
25-02-2008, 18:33:17
ya te acaban de dar le respuesta

DBCC CHECKIDENT ('tu_tabla', RESEED, 1);

Si no te funciona dinos y ya veremos que otra alternativa existe. Depende de tu escenario, pero esta instrucción de SQL server funciona para lo que necesitas. Y sobre todo porque dices que haces un vaciado de "tu_tabla", así que asumo que no hay referencia alguna a ese campo como llave foránea, porque de lo contrario no podrías vaciarla así como así...

Saludos