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
 

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

Preguntas similares