Urgente: error en proc almacenado

06/06/2004 - 13:40 por Asier | Informe spam
Hola grupo,

Tengo el siguiente proc almacenado (lee los primera 20 registros de la tabla
y devuelve el codigo del ultimo):

CREATE PROCEDURE spCiasLeer20
@CodCIA varchar(3) OUTPUT
AS
select top 20 * from CIAS where CodCIA >@CodCIA
SELECT @CodCIA=MAX(CodCIA) FROM (select top 20 * from CIAS where CodCIA

@CodCIA order by codcia) as n


return @CodCIA
GO

La comprobación de sintaxis es correcta, pero al ejecutar desde el
analizador de consultas de esta manera:

spciasleer20 'kk'

me da el siguiente error:


(20 filas afectadas)

Servidor: mensaje 245, nivel 16, estado 1, procedimiento spCiasLeer20, línea
7
Error de sintaxis al convertir el valor varchar '4D ' para una columna de
tipo de datos int.

comentaros que todos los campos de la tabla son de tipo Varchar
¿que esta mal?

Gracias por vuestra ayuda,

Asier

Preguntas similare

Leer las respuestas

#6 Javier Loria
07/06/2004 - 00:41 | Informe spam
Hola:
Algunas recomendaciones:
a) Inicia el Procedimiento con un SET NOCOUNT ON. Esto evitara algunos
problemas en el cliente.
b) El Return de un procedimiento para ser consistente con el resto de
procedimientos de sistema de SQL debe ser 0 si es correcto y un valor
distinto de 0 indica si se ha producido un error. Usar CodCia como valor de
retorno no es consistente con la practica comun de procedimientos
almacenados
c) @CodCia es un VARCHAR y el valor de retorno es un entero. (Esto
produce el error).
d) Es mala practica usar * en codigo de produccion, si lo hiciste para
simplificar el ejemplo bien, pero si es para produccion es mejor detallar
las columnas. Esto te hara mas facil el mantenimiento y control de la
aplicacion.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Asier escribio:
Hola grupo,

Tengo el siguiente proc almacenado (lee los primera 20 registros de
la tabla y devuelve el codigo del ultimo):

CREATE PROCEDURE spCiasLeer20
@CodCIA varchar(3) OUTPUT
AS
select top 20 * from CIAS where CodCIA >@CodCIA
SELECT @CodCIA=MAX(CodCIA) FROM (select top 20 * from CIAS where
CodCIA
@CodCIA order by codcia) as n


return @CodCIA
GO

La comprobación de sintaxis es correcta, pero al ejecutar desde el
analizador de consultas de esta manera:

spciasleer20 'kk'

me da el siguiente error:


(20 filas afectadas)

Servidor: mensaje 245, nivel 16, estado 1, procedimiento
spCiasLeer20, línea 7
Error de sintaxis al convertir el valor varchar '4D ' para una
columna de tipo de datos int.

comentaros que todos los campos de la tabla son de tipo Varchar
¿que esta mal?

Gracias por vuestra ayuda,

Asier
Respuesta Responder a este mensaje
#7 Asier
07/06/2004 - 09:40 | Informe spam
Gracias a todos

"Asier" escribió en el mensaje
news:
Hola grupo,

Tengo el siguiente proc almacenado (lee los primera 20 registros de la


tabla
y devuelve el codigo del ultimo):

CREATE PROCEDURE spCiasLeer20
@CodCIA varchar(3) OUTPUT
AS
select top 20 * from CIAS where CodCIA >@CodCIA
SELECT @CodCIA=MAX(CodCIA) FROM (select top 20 * from CIAS where CodCIA
>@CodCIA order by codcia) as n
return @CodCIA
GO

La comprobación de sintaxis es correcta, pero al ejecutar desde el
analizador de consultas de esta manera:

spciasleer20 'kk'

me da el siguiente error:


(20 filas afectadas)

Servidor: mensaje 245, nivel 16, estado 1, procedimiento spCiasLeer20,


línea
7
Error de sintaxis al convertir el valor varchar '4D ' para una columna de
tipo de datos int.

comentaros que todos los campos de la tabla son de tipo Varchar
¿que esta mal?

Gracias por vuestra ayuda,

Asier



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida