SQL - Ayuda sql Server - Procedimiento Almacenado

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

Ayuda sql Server - Procedimiento Almacenado

Publicado por Alberto (9 intervenciones) el 12/01/2021 04:15:56
Buenas Tardes amigos;

Tengo el Siguiente Procedimiento almacenado solo tiene un parámetro, pero al ejecutarlo me sale error de conversión pero no se donde modificar por favor ayúdenme, Gracias.

EXEC [dbo].[SYP_RPT_CAJACHICA_METAX] 'C1011103-21001'


Este el el error:
Msg 245, Level 16, State 1, Procedure SYP_RPT_CAJACHICA_METAX, Line 20 [Batch Start Line 54]
Conversion failed when converting the nvarchar value '1011111 -' to data type int.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
USE [PRUEBA_METAX]
GO
/****** Object:  StoredProcedure [dbo].[SYP_RPT_CAJACHICA_METAX]    Script Date: 11/01/2021 17:34:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SYP_RPT_CAJACHICA_METAX]
(
	@ref1 nvarchar(30)
)
 
AS
 
DECLARE @accountNum as int
DECLARE @MainCurr as nvarchar(10)
DECLARE @Comments1 As NVARCHAR(100)
DECLARE @Comments2 As NVARCHAR(100)
 
BEGIN
 
SET @accountNum = (SELECT B."AcctCode" FROM OVPM A INNER JOIN VPM4 B on A."DocEntry" = B."DocNum" WHERE A."U_SYP_TPOOPER" = 'CC01' and A."Canceled" = 'N' and A."U_SYP_REF2" = @ref1)
SET @MainCurr = (SELECT "MainCurncy" FROM OADM)
--SET @Comments1 = (SELECT A."Comments" FROM OVPM A INNER JOIN VPM4 B on A."DocEntry" = B."DocNum" WHERE A."U_SYP_TPOOPER" = 'CC01' and A."Canceled" = 'N' and A."U_SYP_REF2" = @ref1)
--SET @Comments2 = (SELECT A."JrnlMemo" FROM OVPM A INNER JOIN VPM4 B on A."DocEntry" = B."DocNum" WHERE A."U_SYP_TPOOPER" = 'CC01' and A."Canceled" = 'N' and A."U_SYP_REF2" = @ref1)
 
SELECT T0."TransId", T0."TransType", T0."BaseRef", T1."Account", ISNULL(T1."FCCurrency",'S/') as "Moneda", CASE WHEN T1."Debit" > 0 THEN T1."Debit" ELSE -1 * T1."Credit" END AS "Amount",
	   T1."Ref2", T1."LineMemo",CASE WHEN T1."Debit" > 0 THEN 'in' ELSE 'out' END as "Type",T0."RefDate", ISNULL(T0."Indicator",'') as "Indicator",
	   CASE T0."TransType" WHEN 46 THEN (SELECT A."U_SYP_TPOOPER" FROM OVPM A WHERE A."DocEntry" = T0."BaseRef") END AS "TipoPago",
	   CASE T0."TransType" WHEN 46 THEN CASE (SELECT A."DocType" FROM OVPM A WHERE A."DocEntry" = T0."BaseRef")
									    WHEN 'S' THEN CASE WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") > 1 THEN 'Varios Documentos'
														   WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") = 0 THEN 'Pago a Cuenta' + (SELECT A."CardCode" FROM OVPM A WHERE A."DocNum" = T0."BaseRef")
														   ELSE CASE (SELECT B."InvType" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef")
															    WHEN 18 THEN (SELECT C."CardName" + ' (' + C."U_SYP_MDTD" + '-' + C."U_SYP_MDSD" + '-' + C."U_SYP_MDCD" +')' FROM OPCH C WHERE C."DocEntry" = (SELECT B."DocEntry" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef"))
															    END
														   END
									    WHEN 'A' THEN CASE WHEN (SELECT COUNT(*) FROM VPM4 B WHERE B."DocNum" = T0."BaseRef") > 1 THEN 'Varios Gastos'
														   ELSE ISNULL((SELECT B."Descrip" FROM VPM4 B WHERE B."DocNum" = T0."BaseRef"),T1."LineMemo")
														   END
										WHEN 'C' THEN CASE WHEN (SELECT U_SYP_TPOOPER FROM OVPM B WHERE B."DocEntry" = T0."BaseRef") = 'ERC1' THEN 'Apertura ER (' + (SELECT U_SYP_NUMER FROM OVPM B WHERE B."DocEntry" = T0."BaseRef") + ')'
														   WHEN (SELECT U_SYP_TPOOPER FROM OVPM B WHERE B."DocEntry" = T0."BaseRef") = 'ERC2' THEN 'Reembolso ER (' + (SELECT U_SYP_NUMER FROM OVPM B WHERE B."DocEntry" = T0."BaseRef") + ')'
														   END
									    END
	   END AS "Desc",
	   (SELECT A."DocType" FROM OVPM A WHERE A."DocEntry" = T0."BaseRef") AS "tipoOVPM",
	   (SELECT B."InvType" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") AS "TipoDOC",
 
	   (SELECT ISNULL(C."Comments",'') FROM OPCH C WHERE C."DocEntry" = (SELECT B."DocEntry" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef"))
	   AS "Comentario",
	   CASE T0."TransType" WHEN 46 THEN CASE (SELECT A."DocType" FROM OVPM A WHERE A."DocEntry" = T0."BaseRef")
									    WHEN 'S' THEN CASE WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") > 1 THEN 'OVPM'
														   WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") = 0 THEN 'OVPM'
														   ELSE CASE (SELECT B."InvType" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef")
															    WHEN 18 THEN 'OPCH'
															    END
														   END
									    WHEN 'A' THEN 'OVPM'
										WHEN 'C' THEN 'OVPM'
									    END
						   WHEN 30 THEN 'OJDT'
	   END AS "Table",
	   CASE T0."TransType" WHEN 46 THEN CASE (SELECT A."DocType" FROM OVPM A WHERE A."DocEntry" = T0."BaseRef")
									    WHEN 'S' THEN CASE WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") > 1 THEN T0."BaseRef"
														   WHEN (SELECT COUNT(*) FROM VPM2 B WHERE B."DocNum" = T0."BaseRef") = 0 THEN T0."BaseRef"
														   ELSE CASE (SELECT B."InvType" FROM VPM2 B WHERE B."DocNum" = T0."BaseRef")
															    WHEN 18 THEN (SELECT A."DocEntry" FROM VPM2 A WHERE A."DocNum" = T0."BaseRef")
															    END
														   END
									    WHEN 'A' THEN T0."BaseRef"
									    END
						   WHEN 30 THEN T0."BaseRef"
	   END AS "DocEntry",
	   (SELECT "CompnyName" FROM OADM) as "Company", @MainCurr as "MainCurr", @accountNum as "CuentaCC" , @Comments1 as "Comentarios 1", @Comments2 as "Comentarios 2"
FROM   OJDT T0 INNER JOIN JDT1 T1 ON T0."TransId" = T1."TransId"
WHERE  "Account" = @accountNum and T0."StornoToTr" is null
	   and T0."TransId" not in (SELECT DISTINCT A1."StornoToTr" FROM OJDT A1 WHERE "StornoToTr" is not null)
	   and T1."Ref1" = @ref1
ORDER BY T0."RefDate", T0."TransId";
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda sql Server - Procedimiento Almacenado

Publicado por anonymous (43 intervenciones) el 12/01/2021 17:37:28
Revise bien lo que le devuelve ese query, si si le cabe en un int, ya que usted declaró accountNum como int.

usted está intentando convertir datos alojados en variables de tipo nvarchar a entero o le haces un cast o le cambias el tipo de dato

Y por otra parte te recomiendo no trabajes con nvarchar, esto crece las bases de datos de una forma exponencial, si tus columnas están definidas así en las tablas, recomiendo cambiarles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

Ayuda sql Server - Procedimiento Almacenado

Publicado por alberto (9 intervenciones) el 14/01/2021 04:12:49
Auxilio, me ayudan???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda sql Server - Procedimiento Almacenado

Publicado por Isaias (1921 intervenciones) el 14/01/2021 16:16:40
Ya te comentaron que debes hacer

Estas haciendo una conversión implícita, por ejemplo

WHERE Campo = 1234

Si Campo trae caracteres, te mandara el mensaje de error que dices

Conversion failed when converting the nvarchar value '1011111 -' to data type int.

¿Dónde estas haciendo la conversión? Según el error: Line 20 [Batch Start Line 54]

¿Que mas necesita?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar