Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error mostrado en un procedimiento almacenado

Estas en el tema de Error mostrado en un procedimiento almacenado en el foro de SQL Server en Foros del Web. Hola a todos, estoy haciendo un procedimiento almacenado que me inserte unos datos dependiendo de unos parámetros que se le envían desde una pagina web ...
  #1 (permalink)  
Antiguo 07/08/2012, 05:46
Avatar de Sougiro  
Fecha de Ingreso: octubre-2007
Mensajes: 136
Antigüedad: 16 años, 6 meses
Puntos: 1
Error mostrado en un procedimiento almacenado

Hola a todos, estoy haciendo un procedimiento almacenado que me inserte unos datos dependiendo de unos parámetros que se le envían desde una pagina web ASP.NET, pero en el momento de ejecutar la consulta y crear el procedimiento el SQL server 2008 me esat mostrando este error:

Msg 2750, Level 16, State 1, Procedure InsertaMensaje, Line 7
Column or parameter #14: Specified column precision 50 is greater than the maximum precision of 38.

este es el procedimiento:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ================================================== ================================================== ===
-- Author: Jhon Restrepo
-- Create date: Agosto 3 de 2012
-- Alter date: Agosto 6 de 2012
-- Description: Inserta y Modifica la informacion registrada del mensaje y de los casos de dicho mensaje
-- ================================================== ================================================== ===
CREATE PROCEDURE InsertaMensaje
-- Parametros de entrada
@ID_COLA NVARCHAR(10),
@ID_PROCESO NVARCHAR(10),
@SECUENCIA NVARCHAR(10),
@ACCION NVARCHAR(4000),
@TIPODOCUMENTO NVARCHAR(50),
@MENSAJECENT NVARCHAR(4000),
@MENSAJECLIENTE NVARCHAR(4000),
@OBSERVACIONES NVARCHAR(4000),
@DESCRIPCION NVARCHAR(4000),
@ID_CASO NVARCHAR(10)
AS
--Variables
DECLARE @STRSQL nVARCHAR(4000)
DECLARE @OPCION NUMERIC(1)
DECLARE @ID_MENSAJE NUMERIC(1)
DECLARE @ID_CASOS NUMERIC(50)
DECLARE @NUMEROCASO NUMERIC(10)
BEGIN
SET NOCOUNT ON;

SET @ID_MENSAJE = -1
--Consultar la informacion en la base de datos
SELECT @ID_MENSAJE = MENSAJE FROM QUE_HACER_CENT.DBO.MENSAJES WITH (NOLOCK)
WHERE ID_PROCESO = @ID_PROCESO AND SECUENCIA = @SECUENCIA AND ACCION = @ACCION
AND TIPODOCUMENTO = @TIPODOCUMENTO AND MENSAJECENT = @MENSAJECENT AND MENSAJECLIENTE = @MENSAJECLIENTE

IF @ID_MENSAJE <> -1
BEGIN
SET @OPCION = 1
END
ELSE
BEGIN
SET @OPCION = 2
END

IF @OPCION = 1
BEGIN

SELECT @ID_MENSAJE = MAX(ID_MENSAJE) FROM QUE_HACER_CENT.DBO.MENSAJES WITH (NOLOCK)

SET @ID_MENSAJE = @ID_MENSAJE + 1

SELECT @ID_CASOS = MAX(ID_CASOS) FROM QUE_HACER_CENT.DBO.CASOS WITH (NOLOCK)
SELECT @NUMEROCASO = MAX(NUMEROCASO) FROM QUE_HACER_CENT.DBO.CASOS WITH (NOLOCK)
WHERE ID_MENSAJE = @ID_MENSAJE

IF @NUMEROCASO IS NULL
BEGIN
SET @NUMEROCASO = 1
END
ELSE
BEGIN
SET @NUMEROCASO = @NUMEROCASO + 1
END

SET @ID_CASOS = @ID_CASOS + 1

INSERT INTO [Que_Hacer_Cent].[dbo].[Mensajes]([Id_mensaje],[Proceso],[Secuencia],[Accion],[TipoDocumento]
,[MensajeCliente],[MensajeCent],[Observaciones],[Id_Cola])
VALUES
(@ID_MENSAJE,@ID_PROCESO,@SECUENCIA,@ACCION,@TIPOD OCUMENTO,@MENSAJECENT,@MENSAJECLIENTE,@OBSERVACION ES,@ID_COLA)
INSERT INTO [Que_Hacer_Cent].[dbo].[Casos]
([Id_Casos],[NumeroCaso],[Id_mensaje],[Descripcion])
VALUES
(@ID_CASOS,@NUMEROCASO,@ID_MENSAJE,@DESCRIPCION)
END
IF @OPCION = 2
BEGIN
UPDATE [Que_Hacer_Cent].[dbo].[Mensajes]
SET [Proceso] = @ID_PROCESO
,[Secuencia] = @SECUENCIA
,[Accion] = @ACCION
,[TipoDocumento] = @TIPODOCUMENTO
,[MensajeCliente] = @MENSAJECENT
,[MensajeCent] = @MENSAJECLIENTE
,[Observaciones] = @OBSERVACIONES
,[Id_Cola] = @ID_COLA
WHERE ID_MENSAJE = @ID_MENSAJE

UPDATE [Que_Hacer_Cent].[dbo].[Casos]
SET [Descripcion] = @DESCRIPCION
WHERE ID_CASOS = @ID_CASO


END
END
GO

Por favor, ayúdenme. Gracias
  #2 (permalink)  
Antiguo 07/08/2012, 07:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error mostrado en un procedimiento almacenado

a lo que se ve en el error lo que pasa es que una de tus columnas es mas grande que el tamaño el cual esta definida esto es por ejemplo que tu columna acepta nada mas 10 caracteres y lo que regresas en tu query tiene 15 :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 07/08/2012, 07:50
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Error mostrado en un procedimiento almacenado

Segun el error, esta variable tiene una precision muy grande, lo mas que se permite es 38 digitos...

cambiandola ya no deberia marcar error..

Código:
DECLARE @ID_CASOS NUMERIC(38)
sin embargo, esa variable deberia tener el mismo tipo de dato que este campo..

Código:
ID_CASOS de QUE_HACER_CENT.DBO.CASO
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 08/08/2012, 21:57
Avatar de Sougiro  
Fecha de Ingreso: octubre-2007
Mensajes: 136
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Error mostrado en un procedimiento almacenado

Muchísimas gracias por la respuesta, tenias toda la razón el id_casos no puede tener mas de 38 dígitos, aunque creo que son muchos mas de los que se deberían usar para un ID. Muchas gracias y XD para ti, y para todos los que vieron y comentaron mi post XD.

Etiquetas: insert, procedimiento, select, server, sql, update, almacenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:54.