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

#1 Juan
06/06/2004 - 16:12 | Informe spam
Creo que el problema está en que la función MAX sirve para
tipos numéricos. Parece que quieres hacer paginación. Para
ello te recomiendo agregar un campo bigint autoincrement
que numere los registros de forma automática y pasarías
como parámetro el ID que necesites. Seguro que el problema
radica en el uso del tipo varchar como índice de los
registros.

Eso podría ser una solución :)

Suerte


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
#2 Emilio Boucau \(en casa\)
06/06/2004 - 17:45 | Informe spam
Max() soporta strings, numeros y fechas.


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#3 Emilio Boucau \(en casa\)
06/06/2004 - 17:54 | Informe spam
Hola,

primero que nada, tu procedure tiene codigo redundante:

// -
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

// -

Segundo, creo que tenes un problema en tu 'data-quality', es decir, tenes
datos incorrectos. Ese '4D' me suena a basura en algun campo.


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#4 Asier
06/06/2004 - 23:24 | Informe spam
Hola,

Gracias por tu ayuda. El primer select lo hago para leer los datos y
volcarlos en la grid y el segundo para obtener el ultimo. No sé como
ahorrarmelo.
Los datos son correctos. El 4D es un código interno especial que usamos.

Sigo con el problema
Ayuda.

Gracias,

Asier
"Emilio Boucau (en casa)" escribió en el mensaje
news:
Hola,

primero que nada, tu procedure tiene codigo redundante:

// -
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

// -

Segundo, creo que tenes un problema en tu 'data-quality', es decir, tenes
datos incorrectos. Ese '4D' me suena a basura en algun campo.


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com


Respuesta Responder a este mensaje
#5 Manuel Etcheto
06/06/2004 - 23:27 | Informe spam
Hola
RETURN no puede devolver un varchar,
si devuelve algo tiene que ser INT

Quitale la línea 'return @CodCIA', que tu valor ya sale
como parámetro output.

Suerte
Manuel

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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida