Agregar Registros

26/03/2007 - 21:35 por SystemBuilder | Informe spam
Hola amigos:

Tengo mis tablas, y a ninguna de ellas le puse un campo
autoincrementativo...

el asunto es que tengo una tabla con un indice numérico y queria saber
si hay alguna función para agregar registros desde mi aplicativo en
VB60, y el indice se autoincremente o por lo menos saber si hay
unafuncion que me indique el ultimo registro,

Seguros de su ayuda, espero respuestas

Muuuuchas gracias.

SystemBuilder
Lima Perú

ya botaste por machupicchu???
www.new7wonders.com

Preguntas similare

Leer las respuestas

#6 Javier Loria
29/03/2007 - 16:43 | Informe spam
Hola Maxi:
Porque participan en transacciones?, y las transacciones son ACID, que
incluye atomica e independiente.
Saludos,

Hola SystemBuilder
Lo que Maxi te quiere prevenir es de los problemas de escalabilidad que
produce este modelo, si tienes cientos o miles de usuarios haciendo lo
mismo, este modelo no escala bien, ya que entonces se produce una contensión
enorme por obtener el último numero.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Maxi" wrote in message
news:
Hola, para mi esto no es correcto, es muy lento y ademas como aseguras que
2 personas no esten haciendo lo mismo y les de el mismo numero?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"SystemBuilder" escribió en el mensaje
news:
Bueno amigos:

No creo que esté mal, porque me funciona esto:

Select Count(*) From MiTabla

Y me da el número de registros, seguidamente le adiciono UNO y ya
tengo el registro siguiente a ingresar.

Corríjanme si esto no es lo correcto, ya que mi aplicativo administra
algo de 30000 registros ya.

como siempre muuuuchas gracias...

SystemBuilder
Lima Perú

ya botaste por machupicchu???
www.new7wonders.com



Respuesta Responder a este mensaje
#7 Maxi
29/03/2007 - 17:21 | Informe spam
Javier, si correcto eso pero si obtengo un numero de esa manera y luego le
sumo uno el tema esta en como le sumo ese uno, si lo pongo en una variable y
lñuego se sumo uno el modelo de transacciones aqui no funciona y puede que 2
usuarios obtengan el mismo numero, yo me referia mas a eso.


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Javier Loria" escribió en el mensaje
news:
Hola Maxi:
Porque participan en transacciones?, y las transacciones son ACID, que
incluye atomica e independiente.
Saludos,

Hola SystemBuilder
Lo que Maxi te quiere prevenir es de los problemas de escalabilidad que
produce este modelo, si tienes cientos o miles de usuarios haciendo lo
mismo, este modelo no escala bien, ya que entonces se produce una
contensión enorme por obtener el último numero.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Maxi" wrote in message
news:
Hola, para mi esto no es correcto, es muy lento y ademas como aseguras
que 2 personas no esten haciendo lo mismo y les de el mismo numero?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"SystemBuilder" escribió en el mensaje
news:
Bueno amigos:

No creo que esté mal, porque me funciona esto:

Select Count(*) From MiTabla

Y me da el número de registros, seguidamente le adiciono UNO y ya
tengo el registro siguiente a ingresar.

Corríjanme si esto no es lo correcto, ya que mi aplicativo administra
algo de 30000 registros ya.

como siempre muuuuchas gracias...

SystemBuilder
Lima Perú

ya botaste por machupicchu???
www.new7wonders.com






Respuesta Responder a este mensaje
#8 Javier Loria
29/03/2007 - 19:15 | Informe spam
Hola Maxi:
Lo siento, pero de que hablas? Transacciones!!!!
Dos ejemplos
1) En la misma setencia:
INSERT Tabla(Col1, Col2, ., Coln)
SELECT COALESCE(MAX(Col1),0)+1, @Col2, ... , @Coln
FROM Tabla
Al ser la misma setencia funciona siempre con una transaccion implicita.
2) En dos sentencias, con asignacion de variable:
BEGIN TRAN
CREATE TABLE Test(
TestID INT --IDENTITY(1,1)
NOT NULL PRIMARY KEY,
TestName varchar(20) NOT NULL
)
GO
DECLARE @Test INT
BEGIN TRAN
SELECT @Test=COALESCE(MAX(TESTID),0)+1
FROM TEST WITH (UPDLOCK)
SELECT @Test
= En otra ventana del SSMS inica otra transaccion igual a la primera
=-- Inicias la segunda transacción
DECLARE @Test INT
BEGIN TRAN
SELECT @Test=COALESCE(MAX(TESTID),0)+1
FROM TEST WITH (UPDLOCK)
SELECT @Test
= Veras como la segunda transaccion esperara a la primera hasta que hagas
commit.
Esto lo hace porque en el select le dices la intencion de actualizar el
valor, con el WITH.
El problema no es que NO funcione, el problema es que modelo no escala
bien, ya que entonces se produce una contención enorme por obtener el último
número, cuando hay miles de usuarios y transacciones largas.
El identity se invento para quitarse la transaccion de encima, y escalar
mejor.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Maxi" wrote in message
news:
Javier, si correcto eso pero si obtengo un numero de esa manera y luego le
sumo uno el tema esta en como le sumo ese uno, si lo pongo en una variable
y lñuego se sumo uno el modelo de transacciones aqui no funciona y puede
que 2 usuarios obtengan el mismo numero, yo me referia mas a eso.


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Javier Loria" escribió en el mensaje
news:
Hola Maxi:
Porque participan en transacciones?, y las transacciones son ACID,
que incluye atomica e independiente.
Saludos,

Hola SystemBuilder
Lo que Maxi te quiere prevenir es de los problemas de escalabilidad que
produce este modelo, si tienes cientos o miles de usuarios haciendo lo
mismo, este modelo no escala bien, ya que entonces se produce una
contensión enorme por obtener el último numero.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Maxi" wrote in message
news:
Hola, para mi esto no es correcto, es muy lento y ademas como aseguras
que 2 personas no esten haciendo lo mismo y les de el mismo numero?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"SystemBuilder" escribió en el mensaje
news:
Bueno amigos:

No creo que esté mal, porque me funciona esto:

Select Count(*) From MiTabla

Y me da el número de registros, seguidamente le adiciono UNO y ya
tengo el registro siguiente a ingresar.

Corríjanme si esto no es lo correcto, ya que mi aplicativo administra
algo de 30000 registros ya.

como siempre muuuuchas gracias...

SystemBuilder
Lima Perú

ya botaste por machupicchu???
www.new7wonders.com










Respuesta Responder a este mensaje
#9 DNC
29/03/2007 - 19:24 | Informe spam
podrias usar una tabal de configuracion global donde guardes el nro
actual y luego dentro de una transaccion lees el nro lo utilizas y lo
incrementas.

saludos!!
diego


On 26 mar, 16:35, "SystemBuilder" wrote:
Hola amigos:

Tengo mis tablas, y a ninguna de ellas le puse un campo
autoincrementativo...

el asunto es que tengo una tabla con un indice numérico y queria saber
si hay alguna función para agregar registros desde mi aplicativo en
VB60, y el indice se autoincremente o por lo menos saber si hay
unafuncion que me indique el ultimo registro,

Seguros de su ayuda, espero respuestas

Muuuuchas gracias.

SystemBuilder
Lima Perú

ya botaste por machupicchu???www.new7wonders.com
Respuesta Responder a este mensaje
#10 Maxi
29/03/2007 - 19:32 | Informe spam
Javier, justamente hablaba de eso, a ver, tu codigo funciona y eso lo se :)
el tema que yo queria decir era: si la persona que esta intentanbdo
incrementar no toma algunos recaudos a la hora de obtener el ultimo valor
(como bien has hecho tu con With) el resultado podria no ser el esperado, a
eso me referia y quizas se entendio mal, hay mas de una manera de resolver
este tema y la tuya es una pero me juego a q nuestro amigo cuando quiere
autoincrementar no usa el With :( demas esta decir el tema de escalamiento
cuando hay muchos usuarios


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Javier Loria" escribió en el mensaje
news:
Hola Maxi:
Lo siento, pero de que hablas? Transacciones!!!!
Dos ejemplos
1) En la misma setencia:
> INSERT Tabla(Col1, Col2, ., Coln)
SELECT COALESCE(MAX(Col1),0)+1, @Col2, ... , @Coln
FROM Tabla
> Al ser la misma setencia funciona siempre con una transaccion
implicita.
2) En dos sentencias, con asignacion de variable:
BEGIN TRAN
CREATE TABLE Test(
TestID INT --IDENTITY(1,1)
NOT NULL PRIMARY KEY,
TestName varchar(20) NOT NULL
)
GO
DECLARE @Test INT
BEGIN TRAN
SELECT @Test=COALESCE(MAX(TESTID),0)+1
FROM TEST WITH (UPDLOCK)
SELECT @Test
=> En otra ventana del SSMS inica otra transaccion igual a la primera
=> -- Inicias la segunda transacción
DECLARE @Test INT
BEGIN TRAN
SELECT @Test=COALESCE(MAX(TESTID),0)+1
FROM TEST WITH (UPDLOCK)
SELECT @Test
=> Veras como la segunda transaccion esperara a la primera hasta que hagas
commit.
Esto lo hace porque en el select le dices la intencion de actualizar el
valor, con el WITH.
El problema no es que NO funcione, el problema es que modelo no escala
bien, ya que entonces se produce una contención enorme por obtener el
último número, cuando hay miles de usuarios y transacciones largas.
El identity se invento para quitarse la transaccion de encima, y
escalar mejor.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Maxi" wrote in message
news:
Javier, si correcto eso pero si obtengo un numero de esa manera y luego
le sumo uno el tema esta en como le sumo ese uno, si lo pongo en una
variable y lñuego se sumo uno el modelo de transacciones aqui no funciona
y puede que 2 usuarios obtengan el mismo numero, yo me referia mas a eso.


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Javier Loria" escribió en el mensaje
news:
Hola Maxi:
Porque participan en transacciones?, y las transacciones son ACID,
que incluye atomica e independiente.
Saludos,

Hola SystemBuilder
Lo que Maxi te quiere prevenir es de los problemas de escalabilidad
que produce este modelo, si tienes cientos o miles de usuarios haciendo
lo mismo, este modelo no escala bien, ya que entonces se produce una
contensión enorme por obtener el último numero.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Maxi" wrote in message
news:
Hola, para mi esto no es correcto, es muy lento y ademas como aseguras
que 2 personas no esten haciendo lo mismo y les de el mismo numero?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"SystemBuilder" escribió en el mensaje
news:
Bueno amigos:

No creo que esté mal, porque me funciona esto:

Select Count(*) From MiTabla

Y me da el número de registros, seguidamente le adiciono UNO y ya
tengo el registro siguiente a ingresar.

Corríjanme si esto no es lo correcto, ya que mi aplicativo administra
algo de 30000 registros ya.

como siempre muuuuchas gracias...

SystemBuilder
Lima Perú

ya botaste por machupicchu???
www.new7wonders.com













Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida