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

#6 Alejandro Mesa
18/03/2005 - 17:11 | Informe spam
Alioscha Debali,

No puedes llamar un procedimiento almacenado desde una funcion de usuario,
al menos que este sea extendido. Para mas informacion lee "CREATE FUNCTION"
en los libros en linea.


AMB


"Alioscha Debali" wrote:

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
#7 Alioscha Debali
18/03/2005 - 17:59 | Informe spam
Sí, es lo que interpreto del mensaje de error. Alguna idea para hace esto
sin SP por que generar un extended me parece miy complicado como solución .

saludos


"Alejandro Mesa" escribió en el
mensaje news:
Alioscha Debali,

No puedes llamar un procedimiento almacenado desde una funcion de usuario,
al menos que este sea extendido. Para mas informacion lee "CREATE


FUNCTION"
en los libros en linea.


AMB


"Alioscha Debali" wrote:

> 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
#8 Alejandro Mesa
18/03/2005 - 18:29 | Informe spam
No se si leistes mi mensaje previo. Una pregunta, por que borras para despues
insertear nuevamente?, por que no nos cuentas un poquito de lo tratas de
hacer.


AMB

"Alioscha Debali" wrote:

Sí, es lo que interpreto del mensaje de error. Alguna idea para hace esto
sin SP por que generar un extended me parece miy complicado como solución .

saludos


"Alejandro Mesa" escribió en el
mensaje news:
> Alioscha Debali,
>
> No puedes llamar un procedimiento almacenado desde una funcion de usuario,
> al menos que este sea extendido. Para mas informacion lee "CREATE
FUNCTION"
> en los libros en linea.
>
>
> AMB
>
>
> "Alioscha Debali" wrote:
>
> > 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
#9 Alioscha Debali
18/03/2005 - 19:28 | Informe spam
El tema es asi.

Tengo armado un sp para cada accion en el servidor por cada table
(insert, update, delete) donde el cliente le manda como parametro un @xml
con le contenido de la ltabla hace los siguiente

CREATE PROCEDURE [dbo].[Csts_Insert]
@XML TEXT
AS
Set NoCount On
Declare @iDoc int
Declare @path varchar(50)
SET @path = 'VFPData/row'
SET TEXTSIZE 2147483647 /**Seteo del OLE DB Provider para SQL **/
EXEC sp_xml_preparedocument @iDoc OUTPUT, @xml , '<Root
xmlns:updg="urn:schemas-microsoft-com:xml-updategram"></Root>'
INSERT INTO [dbo].[Csts](ccodcsts,cnomcsts,les_plta,les_camara)
SELECT * FROM OPENXML(@iDOc, @PATH,1)
WITH (
ccodcsts char (4),
cnomcsts char (30),
les_plta tinyint,
les_camara tinyint
)
EXEC sp_xml_removedocument @iDoc
IF (@@ERROR<>0 OR @@ROWCOUNT=0) RETURN -1
ELSE RETURN 0


como verán el procedimiento hace la actaulizacion solito, como imaginarán
los sp los genero en forma automatica dando como parametro el nombre de la
tabla y me hace este sp y los otros. Un detalle es que los campo de tipo
auto icrementales no se incluyen dentro de los datos a actualizar, porq los
reservo como para tener un id de cada registro el viejo estilo dbase. Desde
la aplicacion cliente le mando un parametro @XML con los datos a actualizar
ya sea uno o varios registros y el sp hace todo. Para facilitar el tema arme
un framework en el cliente y cuando decido acutalizar los datos desde el
cliente primero ejeuta un delete y luego un insert no hayo update a no ser
que los pide en forma expresa que es muy ocacional. Si la operacion
involucra varias tablas, inicio una transaccion y luego voy executando cada
sp (caso factura - items). En general si quiero modificar algun dato o
compratamiento del sp lo hago desde los trigers de cada tabla.
Pos eso quiero asignar un numero desde un triger y no meterme en el sp.

la solcusion que tuve que implemntar es desde el cliente asignar el numero
pero esto puede generar serios problemas ya que puede generar el mismo
numero para diferentes conexiones.

Espero haber sido claro con el modelo que tengo aplicado.

saludos



"Alejandro Mesa" escribió en el
mensaje news:
No se si leistes mi mensaje previo. Una pregunta, por que borras para


despues
insertear nuevamente?, por que no nos cuentas un poquito de lo tratas de
hacer.


AMB

"Alioscha Debali" wrote:

> Sí, es lo que interpreto del mensaje de error. Alguna idea para hace


esto
> sin SP por que generar un extended me parece miy complicado como


solución .
>
> saludos
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Alioscha Debali,
> >
> > No puedes llamar un procedimiento almacenado desde una funcion de


usuario,
> > al menos que este sea extendido. Para mas informacion lee "CREATE
> FUNCTION"
> > en los libros en linea.
> >
> >
> > AMB
> >
> >
> > "Alioscha Debali" wrote:
> >
> > > 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
#10 Alejandro Mesa
18/03/2005 - 20:49 | Informe spam
Alioscha Debali,

Esto es solo un comentario, mi intencion no es criticar.

reservo como para tener un id de cada registro el viejo estilo dbase.



Si no te dehaces de este principio, entonces nunca haras buen uso de las
bases de datos relacionales. No trates las tablas como si fuesen archivos
secuenciales.

ya sea uno o varios registros y el sp hace todo. Para facilitar el tema arme
un framework en el cliente y cuando decido acutalizar los datos desde el
cliente primero ejeuta un delete y luego un insert no hayo update a no ser
que los pide en forma expresa que es muy ocacional.



Al parecer la facilidad no es tan obvia.


Pudieras decirnos cuales son las razones para no hacer updates?

Por que no hacer uso de la integridad referencial por medio de declaracion y
no de codigo?


AMB

"Alioscha Debali" wrote:

El tema es asi.

Tengo armado un sp para cada accion en el servidor por cada table
(insert, update, delete) donde el cliente le manda como parametro un @xml
con le contenido de la ltabla hace los siguiente

CREATE PROCEDURE [dbo].[Csts_Insert]
@XML TEXT
AS
Set NoCount On
Declare @iDoc int
Declare @path varchar(50)
SET @path = 'VFPData/row'
SET TEXTSIZE 2147483647 /**Seteo del OLE DB Provider para SQL **/
EXEC sp_xml_preparedocument @iDoc OUTPUT, @xml , '<Root
xmlns:updg="urn:schemas-microsoft-com:xml-updategram"></Root>'
INSERT INTO [dbo].[Csts](ccodcsts,cnomcsts,les_plta,les_camara)
SELECT * FROM OPENXML(@iDOc, @PATH,1)
WITH (
ccodcsts char (4),
cnomcsts char (30),
les_plta tinyint,
les_camara tinyint
)
EXEC sp_xml_removedocument @iDoc
IF (@@ERROR<>0 OR @@ROWCOUNT=0) RETURN -1
ELSE RETURN 0


como verán el procedimiento hace la actaulizacion solito, como imaginarán
los sp los genero en forma automatica dando como parametro el nombre de la
tabla y me hace este sp y los otros. Un detalle es que los campo de tipo
auto icrementales no se incluyen dentro de los datos a actualizar, porq los
reservo como para tener un id de cada registro el viejo estilo dbase. Desde
la aplicacion cliente le mando un parametro @XML con los datos a actualizar
ya sea uno o varios registros y el sp hace todo. Para facilitar el tema arme
un framework en el cliente y cuando decido acutalizar los datos desde el
cliente primero ejeuta un delete y luego un insert no hayo update a no ser
que los pide en forma expresa que es muy ocacional. Si la operacion
involucra varias tablas, inicio una transaccion y luego voy executando cada
sp (caso factura - items). En general si quiero modificar algun dato o
compratamiento del sp lo hago desde los trigers de cada tabla.
Pos eso quiero asignar un numero desde un triger y no meterme en el sp.

la solcusion que tuve que implemntar es desde el cliente asignar el numero
pero esto puede generar serios problemas ya que puede generar el mismo
numero para diferentes conexiones.

Espero haber sido claro con el modelo que tengo aplicado.

saludos



"Alejandro Mesa" escribió en el
mensaje news:
> No se si leistes mi mensaje previo. Una pregunta, por que borras para
despues
> insertear nuevamente?, por que no nos cuentas un poquito de lo tratas de
> hacer.
>
>
> AMB
>
> "Alioscha Debali" wrote:
>
> > Sí, es lo que interpreto del mensaje de error. Alguna idea para hace
esto
> > sin SP por que generar un extended me parece miy complicado como
solución .
> >
> > saludos
> >
> >
> > "Alejandro Mesa" escribió en
el
> > mensaje news:
> > > Alioscha Debali,
> > >
> > > No puedes llamar un procedimiento almacenado desde una funcion de
usuario,
> > > al menos que este sea extendido. Para mas informacion lee "CREATE
> > FUNCTION"
> > > en los libros en linea.
> > >
> > >
> > > AMB
> > >
> > >
> > > "Alioscha Debali" wrote:
> > >
> > > > 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 AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida