Generar mi autonumerico

21/05/2008 - 22:02 por CHAR72 | Informe spam
Hola compañeros! tengo cierto inconveniente que no puedo resolver. Tengo un
sistema que tiene un id que lo detemina de una tabla donde guarda el ultimo
id y le va sumando uno por cada nuevo registro. Cuando es un insert de un
registro no hay inconveniente, pero ahora debo realizar varios insert y no
se como obtener ese numero, intente crear una funcion que lo obtenga pero
solo permite otras funciones o procedimientos extendidos.

Como puedo resolver la cuestion con SQL 2000?

Saludos

Carlos

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
21/05/2008 - 22:23 | Informe spam
CHAR72,

Esa es una de las desventajas de generar el autonumerico de manera propia,
y no usar la facilidad de las columnas con propiedad IDENTITY. Tendras que
usar un lazo / cursor e insertar las filas una por una.


AMB

"CHAR72" wrote:

Hola compañeros! tengo cierto inconveniente que no puedo resolver. Tengo un
sistema que tiene un id que lo detemina de una tabla donde guarda el ultimo
id y le va sumando uno por cada nuevo registro. Cuando es un insert de un
registro no hay inconveniente, pero ahora debo realizar varios insert y no
se como obtener ese numero, intente crear una funcion que lo obtenga pero
solo permite otras funciones o procedimientos extendidos.

Como puedo resolver la cuestion con SQL 2000?

Saludos

Carlos




Respuesta Responder a este mensaje
#2 CHAR72
22/05/2008 - 00:41 | Informe spam
Lamentablemente las cosas estan asi, habria que cambiar toda la estructura
del sistema para ponerle IDENTITY.

Gracias

"Alejandro Mesa" escribió en el
mensaje news:
CHAR72,

Esa es una de las desventajas de generar el autonumerico de manera propia,
y no usar la facilidad de las columnas con propiedad IDENTITY. Tendras que
usar un lazo / cursor e insertar las filas una por una.


AMB

"CHAR72" wrote:

Hola compañeros! tengo cierto inconveniente que no puedo resolver. Tengo
un
sistema que tiene un id que lo detemina de una tabla donde guarda el
ultimo
id y le va sumando uno por cada nuevo registro. Cuando es un insert de un
registro no hay inconveniente, pero ahora debo realizar varios insert y
no
se como obtener ese numero, intente crear una funcion que lo obtenga pero
solo permite otras funciones o procedimientos extendidos.

Como puedo resolver la cuestion con SQL 2000?

Saludos

Carlos




Respuesta Responder a este mensaje
#3 Miguel Egea
22/05/2008 - 10:42 | Informe spam
Si usas SQL 2005 puedes hacer un procedimiento como el siguiente y llamarlo
para obtener un identificador con tabla, tiene todos los inconvenientes y
ventas de los identities, no te obliga acambiar la estructura aunque ocupas
un schema. Si no usas SQL 2005 es adaptable. Creo que no tiene problemas de
inyección de código SQL en cualquier caso ahí tenéis las pruebas.


create schema Maestros;

go
create proc Maestros.GeneraClave (@tabla Sysname,@valor int output)
with execute as owner -- cambialo por alguien con permisos para crear tablas
de forma dinámica
as
begin
declare @sql nvarchar(4000);



if not exists(select 1 from information_Schema.tables where table_name =
@tabla and Table_schema='Maestros')
begin

set @sql = 'CREATE TABLE Maestros.'+ quotename(@tabla) + ' (id int
identity(1,1)) ' ;
exec sp_executeSQL @sql
end

if @@trancount>0
save transaction @tabla
else
begin tran

set @sql=N'SET NOCOUNT ON; INSERT INTO Maestros.'+ quotename(@tabla) + '
DEFAULT VALUES; SELECT @Valor=Scope_identity() '
exec sp_executesql @sql, N' @valor int output', @valor output

rollback tran

end
go

declare @valor int
exec Maestros.GeneraClave 'Mi tabla1',@valor output
select @valor
select * from information_schema.tables where table_schema='Maestros'
go
declare @valor int
exec Maestros.GeneraClave 'Mi ] drop table Maestros.[Mi tabla1] -- ',@valor
output
select @valor
select * from information_schema.tables where table_schema='Maestros'


Saludos
Miguel Egea



"CHAR72" <char72[nos pa m]@gmail.com> wrote in message
news:OB%
Lamentablemente las cosas estan asi, habria que cambiar toda la estructura
del sistema para ponerle IDENTITY.

Gracias

"Alejandro Mesa" escribió en el
mensaje news:
CHAR72,

Esa es una de las desventajas de generar el autonumerico de manera
propia,
y no usar la facilidad de las columnas con propiedad IDENTITY. Tendras
que
usar un lazo / cursor e insertar las filas una por una.


AMB

"CHAR72" wrote:

Hola compañeros! tengo cierto inconveniente que no puedo resolver. Tengo
un
sistema que tiene un id que lo detemina de una tabla donde guarda el
ultimo
id y le va sumando uno por cada nuevo registro. Cuando es un insert de
un
registro no hay inconveniente, pero ahora debo realizar varios insert y
no
se como obtener ese numero, intente crear una funcion que lo obtenga
pero
solo permite otras funciones o procedimientos extendidos.

Como puedo resolver la cuestion con SQL 2000?

Saludos

Carlos










Respuesta Responder a este mensaje
#4 Penta
22/05/2008 - 22:35 | Informe spam
Hola.
Favor que alguien me expique porque no puede hacer un max + 1

insert test select coalesce(max(testid),0)+1 From TEST

Atte.
Penta.
Respuesta Responder a este mensaje
#5 Miguel Egea
23/05/2008 - 09:54 | Informe spam
Por problemas de concurrencia.
Verás select max(text) puede ejecutarse a la vez para dos conexiones
distintas y dar el mismo resultado, y el segundo insert fallaría por clave
duplicada, la verdad es que el código que mandé puede resultar complejo
tiene truquillos , pero me pareció muy interesante de compartir.

Saludos




"Penta" wrote in message
news:
Hola.
Favor que alguien me expique porque no puede hacer un max + 1

insert test select coalesce(max(testid),0)+1 From TEST

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