Ayuda con procedimiento almacenado

12/02/2009 - 18:45 por José Mª Fueyo | Informe spam
Hola a todos.
A ver, estoy creando un procedimiento para insertar registros en una tabla.
La clave primaria es un varchar de 20 posiciones de las cuales las 4 primeras
por la izquierda es una abreviatura, y las 16 siguientes un número
consecutivo (1, 2, 3...) completado con ceros por la izquierda.
Sí existe un registro de la abreviatura no hay problema, crea el segundo.
Pero sí es el primero que crea al serie, intenta generar una clave nula y
claro, da error.
¿Me podeis decir que es lo que hago mal? os dejo aquí el código.

<pego>
CREATE procedure prueba(@Abreviatura varchar(4)) as
Declare @sContador varchar(20), @iContador integer

Select @sContador=substring(max(IdOperacionWS),5,16)
from LogTx
where IdOperacionWS like @Abreviatura +'%'

if @sContador IS NULL
select @sContador=@Abreviatura+ '0000000000000001'
Else
Select @iContadorÊST(@sContador as integer)+1
select @sContador=@Abreviatura+right('0000000000000000' +
cast(@iContador as varchar), 16)

INSERT INTO LogTx(IdOperacionWS) values(@sContador)
GO
</pego>

He de decir que probado de todo: el uso de IsNull, concatenar una cadena
vacía, etc...estoy francamente desesperado (¿será la hora? jeje)
Gracias

Salu2
..
José Mª Fueyo

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
13/02/2009 - 01:50 | Informe spam
El bloque del ELSE no deberia ir entre BEGIN y END ?
Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"José Mª Fueyo" wrote:

Hola a todos.
A ver, estoy creando un procedimiento para insertar registros en una tabla.
La clave primaria es un varchar de 20 posiciones de las cuales las 4 primeras
por la izquierda es una abreviatura, y las 16 siguientes un número
consecutivo (1, 2, 3...) completado con ceros por la izquierda.
Sí existe un registro de la abreviatura no hay problema, crea el segundo.
Pero sí es el primero que crea al serie, intenta generar una clave nula y
claro, da error.
¿Me podeis decir que es lo que hago mal? os dejo aquí el código.

<pego>
CREATE procedure prueba(@Abreviatura varchar(4)) as
Declare @sContador varchar(20), @iContador integer

Select @sContador=substring(max(IdOperacionWS),5,16)
from LogTx
where IdOperacionWS like @Abreviatura +'%'

if @sContador IS NULL
select @sContador=@Abreviatura+ '0000000000000001'
Else
Select @iContadorÊST(@sContador as integer)+1
select @sContador=@Abreviatura+right('0000000000000000' +
cast(@iContador as varchar), 16)

INSERT INTO LogTx(IdOperacionWS) values(@sContador)
GO
</pego>

He de decir que probado de todo: el uso de IsNull, concatenar una cadena
vacía, etc...estoy francamente desesperado (¿será la hora? jeje)
Gracias

Salu2
..
José Mª Fueyo
Respuesta Responder a este mensaje
#2 José Mª Fueyo
16/02/2009 - 16:49 | Informe spam
Hola Gustavo, y perdona por la tardanza en responderte.

Si, ese parece que era el problema. Ya está corregido, y funciona como debe.

Salu2
José Mª Fueyo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida