Obtener un Numero Secuencial

18/03/2005 - 14:59 por Alioscha Debali | Informe spam
Tengo el siquiente problema y no me doy cuenta como solucionarlo.

tengo una tabla en la cual inserto registros, de los cuales uno es un campo
indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
la idea es que el campo nNumero sea secuancial y consecutivo pero que se
asigne en el momento de dar de los registros (mediante un triger insert)
no uso el indent porque cuando hago acutlizacion borro y vuelvo a agregar el
mismo registro (por haberse modificado) pero el campo nNumero debe quedar
igual.
FormÉ un funcion donde me devuele el valor maximo de nNumero y lo actuliza
sumando 1, esto esta bien si inserto un registro pero cuando insert varios
registros en una transaccion me asgine el mismo numero en todos. Me parece
rezonable porque la tabla todavia no esta actualizada.

Me imagino que esto es algo que se usa muy amenudo (emision de facturas,
recibos, etc).

Espero haber sido claro

cualquier ayuda sera bien

Preguntas similare

Leer las respuestas

#1 Maxi
18/03/2005 - 15:08 | Informe spam
Hola, hace un tiempo escribi un articulo sobre este tema, te paso el link

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi


"Alioscha Debali" escribió en el mensaje
news:%
Tengo el siquiente problema y no me doy cuenta como solucionarlo.

tengo una tabla en la cual inserto registros, de los cuales uno es un
campo
indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
la idea es que el campo nNumero sea secuancial y consecutivo pero que se
asigne en el momento de dar de los registros (mediante un triger insert)
no uso el indent porque cuando hago acutlizacion borro y vuelvo a agregar
el
mismo registro (por haberse modificado) pero el campo nNumero debe quedar
igual.
FormÉ un funcion donde me devuele el valor maximo de nNumero y lo actuliza
sumando 1, esto esta bien si inserto un registro pero cuando insert varios
registros en una transaccion me asgine el mismo numero en todos. Me parece
rezonable porque la tabla todavia no esta actualizada.

Me imagino que esto es algo que se usa muy amenudo (emision de facturas,
recibos, etc).

Espero haber sido claro

cualquier ayuda sera bien


Respuesta Responder a este mensaje
#2 Alejandro Mesa
18/03/2005 - 15:17 | Informe spam
Alioscha,

Por que no usas el mismo IDENTITY?, Tu puedes insertar el mismo IDENTITY que
borrastes.

Ejemplo:

use northwind
go

create table dbo.t (
colA int not null identity unique
)
go

insert into t default values
insert into t default values
insert into t default values

select * from t
go

select colA into #t from t where colA = 2

delete t where colA = 2

insert into t default values
select * from t

set identity_insert dbo.t on

insert into t (colA)
select colA from #t

set identity_insert dbo.t off
select * from t

drop table #t
go

drop table t
go


AMB

"Alioscha Debali" wrote:

Tengo el siquiente problema y no me doy cuenta como solucionarlo.

tengo una tabla en la cual inserto registros, de los cuales uno es un campo
indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
la idea es que el campo nNumero sea secuancial y consecutivo pero que se
asigne en el momento de dar de los registros (mediante un triger insert)
no uso el indent porque cuando hago acutlizacion borro y vuelvo a agregar el
mismo registro (por haberse modificado) pero el campo nNumero debe quedar
igual.
FormÉ un funcion donde me devuele el valor maximo de nNumero y lo actuliza
sumando 1, esto esta bien si inserto un registro pero cuando insert varios
registros en una transaccion me asgine el mismo numero en todos. Me parece
rezonable porque la tabla todavia no esta actualizada.

Me imagino que esto es algo que se usa muy amenudo (emision de facturas,
recibos, etc).

Espero haber sido claro

cualquier ayuda sera bien



Respuesta Responder a este mensaje
#3 Alioscha Debali
18/03/2005 - 16:17 | Informe spam
maxi, el articulo es muy interesante y yo encare el problema de la mism
manera, pero mi intensión es que el numero se asigne mediante un
desencadenante.
no queriero tocar los sp sino definir desde la tabla que si el campo nnumero
esta en cero el sistema le asigne uno secuencial, Hice exacamente el mismo
SP que desribis en el artículo. pero no sé como hacer para que el Sp el pase
el numero nuevo a la tabla que estoy acutalizando



/* sp donde obtengo el numero de una tabla con las numeraciones de los cbtes
pasando como parametro el cbte obtengo el nuevo numero del mismo
CREATE PROCEDURE [dbo].[CbteNro_GetNro]
@cCodCbteNro varchar(20),
@nNumero int =0 output
AS
SET NOCOUNT ON
BEGIN TRAN
UPDATE dbo.CbteNro SET
nNumero = nNumero + 1, @nNumero =nNumero + 1
WHERE cCodCbteNro LIKE @cCodCbteNro
COMMIT

RETURN @nNumero


saludos


"Maxi" escribió en el mensaje
news:ugE%
Hola, hace un tiempo escribi un articulo sobre este tema, te paso el link

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi


"Alioscha Debali" escribió en el mensaje
news:%
> Tengo el siquiente problema y no me doy cuenta como solucionarlo.
>
> tengo una tabla en la cual inserto registros, de los cuales uno es un
> campo
> indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
> la idea es que el campo nNumero sea secuancial y consecutivo pero que se
> asigne en el momento de dar de los registros (mediante un triger insert)
> no uso el indent porque cuando hago acutlizacion borro y vuelvo a


agregar
> el
> mismo registro (por haberse modificado) pero el campo nNumero debe


quedar
> igual.
> FormÉ un funcion donde me devuele el valor maximo de nNumero y lo


actuliza
> sumando 1, esto esta bien si inserto un registro pero cuando insert


varios
> registros en una transaccion me asgine el mismo numero en todos. Me


parece
> rezonable porque la tabla todavia no esta actualizada.
>
> Me imagino que esto es algo que se usa muy amenudo (emision de facturas,
> recibos, etc).
>
> Espero haber sido claro
>
> cualquier ayuda sera bien
>
>


Respuesta Responder a este mensaje
#4 Maxi
18/03/2005 - 16:34 | Informe spam
Hola, deberia usar un trigger instead of para poder hacer eso mmm seria
bueno que armemos un ejemplo no? :)


Salu2
Maxi


"Alioscha Debali" escribió en el mensaje
news:
maxi, el articulo es muy interesante y yo encare el problema de la mism
manera, pero mi intensión es que el numero se asigne mediante un
desencadenante.
no queriero tocar los sp sino definir desde la tabla que si el campo
nnumero
esta en cero el sistema le asigne uno secuencial, Hice exacamente el mismo
SP que desribis en el artículo. pero no sé como hacer para que el Sp el
pase
el numero nuevo a la tabla que estoy acutalizando



/* sp donde obtengo el numero de una tabla con las numeraciones de los
cbtes
pasando como parametro el cbte obtengo el nuevo numero del mismo
CREATE PROCEDURE [dbo].[CbteNro_GetNro]
@cCodCbteNro varchar(20),
@nNumero int =0 output
AS
SET NOCOUNT ON
BEGIN TRAN
UPDATE dbo.CbteNro SET
nNumero = nNumero + 1, @nNumero =nNumero + 1
WHERE cCodCbteNro LIKE @cCodCbteNro
COMMIT

RETURN @nNumero


saludos


"Maxi" escribió en el mensaje
news:ugE%
Hola, hace un tiempo escribi un articulo sobre este tema, te paso el link

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi


"Alioscha Debali" escribió en el mensaje
news:%
> Tengo el siquiente problema y no me doy cuenta como solucionarlo.
>
> tengo una tabla en la cual inserto registros, de los cuales uno es un
> campo
> indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
> la idea es que el campo nNumero sea secuancial y consecutivo pero que
> se
> asigne en el momento de dar de los registros (mediante un triger
> insert)
> no uso el indent porque cuando hago acutlizacion borro y vuelvo a


agregar
> el
> mismo registro (por haberse modificado) pero el campo nNumero debe


quedar
> igual.
> FormÉ un funcion donde me devuele el valor maximo de nNumero y lo


actuliza
> sumando 1, esto esta bien si inserto un registro pero cuando insert


varios
> registros en una transaccion me asgine el mismo numero en todos. Me


parece
> rezonable porque la tabla todavia no esta actualizada.
>
> Me imagino que esto es algo que se usa muy amenudo (emision de
> facturas,
> recibos, etc).
>
> Espero haber sido claro
>
> cualquier ayuda sera bien
>
>






Respuesta Responder a este mensaje
#5 Alioscha Debali
18/03/2005 - 16:47 | Informe spam
armé esta funcion

CREATE FUNCTION [Dbo].[Fn_CbteNro_GetNro] (@cCodCbte varchar(30) )
RETURNS BigInt
AS
BEGIN

DECLARE @nNumero as BIGINT
EXECUTE @nNumero ÛO.CbteNro_GetNro 'ANTICIPO'
RETURN(@nNumero)

END


e hice esto en el triger

UPDATE dbo.SuAntiItem set nNumero = dbo.Fn_CbteNro_GetNro('ANTICIPO') where
nNumero = 0


PERO ME DA ESTE ERROR

[CD] Error en Servidor:557
[CD] Only functions and extended stored procedures can be executed from
within a function.
[CD] [Ejecuta] Transaccion descartada


CAMINO SIN SALIDA ???



"Alioscha Debali" escribió en el mensaje
news:
maxi, el articulo es muy interesante y yo encare el problema de la mism
manera, pero mi intensión es que el numero se asigne mediante un
desencadenante.
no queriero tocar los sp sino definir desde la tabla que si el campo


nnumero
esta en cero el sistema le asigne uno secuencial, Hice exacamente el mismo
SP que desribis en el artículo. pero no sé como hacer para que el Sp el


pase
el numero nuevo a la tabla que estoy acutalizando



/* sp donde obtengo el numero de una tabla con las numeraciones de los


cbtes
pasando como parametro el cbte obtengo el nuevo numero del mismo
CREATE PROCEDURE [dbo].[CbteNro_GetNro]
@cCodCbteNro varchar(20),
@nNumero int =0 output
AS
SET NOCOUNT ON
BEGIN TRAN
UPDATE dbo.CbteNro SET
nNumero = nNumero + 1, @nNumero =nNumero + 1
WHERE cCodCbteNro LIKE @cCodCbteNro
COMMIT

RETURN @nNumero


saludos


"Maxi" escribió en el mensaje
news:ugE%
> Hola, hace un tiempo escribi un articulo sobre este tema, te paso el


link
>
>


http://www.microsoft.com/spanish/ms...art187.asp
>
>
> Salu2
> Maxi
>
>
> "Alioscha Debali" escribió en el mensaje
> news:%
> > Tengo el siquiente problema y no me doy cuenta como solucionarlo.
> >
> > tengo una tabla en la cual inserto registros, de los cuales uno es un
> > campo
> > indent (nId_SuAnti bigint) y tengo otro campo que es nNumero (int).
> > la idea es que el campo nNumero sea secuancial y consecutivo pero que


se
> > asigne en el momento de dar de los registros (mediante un triger


insert)
> > no uso el indent porque cuando hago acutlizacion borro y vuelvo a
agregar
> > el
> > mismo registro (por haberse modificado) pero el campo nNumero debe
quedar
> > igual.
> > FormÉ un funcion donde me devuele el valor maximo de nNumero y lo
actuliza
> > sumando 1, esto esta bien si inserto un registro pero cuando insert
varios
> > registros en una transaccion me asgine el mismo numero en todos. Me
parece
> > rezonable porque la tabla todavia no esta actualizada.
> >
> > Me imagino que esto es algo que se usa muy amenudo (emision de


facturas,
> > recibos, etc).
> >
> > Espero haber sido claro
> >
> > cualquier ayuda sera bien
> >
> >
>
>


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