cancel
Showing results for 
Search instead for 
Did you mean: 

VALIDACION DEL LARGO DEL CAMPO DISTNUMBER

Former Member
0 Kudos

BUEN DIA A TODOS!

QUIERO SOLICITARLES SU AYUDA PARA RESOLVER ESTE PROBLEMITA, ESTOY VALIDANDO QUE EL INGRESO DE NUMEROS DE SERIE DE MIS ARTICULOS SEA DE LARGO (15), NI MAS NI MENOS, PERO TENGO 2 NUMEROS DE SERIE EN ALGUNOS ARTICULOS.

AHORA BIEN EN EL SP_TRANSACTIONNOTIFICATION TENGO ESTA VALIDACION:

-- NUMEROS DE SERIE DE LARGO (15)

IF  (@object_type = 20)  and @transaction_type IN ('A', 'U')
BEGIN

-- Numero de Serie 1

       DECLARE @NumSeries as NVarchar (15)
       SET @NumSeries = (SELECT T0.DistNumber
                                         FROM OSRN T0
			             		LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
				         WHERE T1.DocEntry = @list_of_cols_val_tab_del)

       IF (@NumSeries <> (15) )
               BEGIN
                       SET @error = 103
                       SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
       END
END
-- NUMEROS DE SERIE DE LARGO (15)

IF  (@object_type = 20)  and @transaction_type IN('A', 'U')
BEGIN

-- Numero de Serie 2

       DECLARE @NumSeries2 as NVarchar (15)
       SET @NumSeries2 = (SELECT T0.U_DistNumber2
                        FROM OSRN T0
							LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
					    WHERE T1.DocEntry = @list_of_cols_val_tab_del)
       

       IF (@NumSeries2 <> (15) )
               BEGIN
                       SET @error = 103
                       SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
       END
END

EL ERROR ME DICE QUE LA SUBQUERY ARROJA MAS DE UN RESULTADO Y ESTO NO ES PERMITIDO CUANDO NE LA SUBQUERY HAY EXPRESIONES COMO LA SIGUIENTE =,!=,<,>,<=,>=...

SI ALGUIEN TIENE LA SOLUCION LE AGRADECERE.

DESTACO TAMBIEN QUE NO SIEMPRE HAY 2 NUMEROS DE SERIE EN ALGUNOS CASOS EL PRODUCTO LOS TRAE PERO ES NADA MAS EL 20% DE LOS MISMOS.

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

QUE PENA, GRACIAS A QUIENES LEYERON EL POST Y PARA QUIENES NECESITEN ESTA VALIDACION DE ESTA MANERA SE HACE

-- NUMEROS DE SERIE DE LARGO (15)

IF  (@object_type = 20)  and @transaction_type IN ('A', 'U')
BEGIN

       DECLARE @NumSeries as NVarchar (15)
       SELECT @NumSeries = LEN(T0.DistNumber)
                         FROM OSRN T0
							LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
						 WHERE T1.DocEntry = @list_of_cols_val_tab_del

       IF (@NumSeries>0 AND @NumSeries != 15)
               BEGIN
                       SET @error = 103
                       SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
       END
ELSE 

       DECLARE @NumSeries2 as NVarchar (15)
       SELECT @NumSeries2 = LEN(T0.U_DistNumber2)
                         FROM OSRN T0
							LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
						 WHERE T1.DocEntry = @list_of_cols_val_tab_del

       IF @NumSeries2>0 AND @NumSeries2 != 15
               BEGIN
                       SET @error = 103
                       SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
       END

END

BIEN FELIPE ASI ESTAMOS DE ACUERDO?

GRACIAS MAURICIO TENES RAZON ENLAS DOS APRECIACIONES, NO HABIA LEIDO TU RESPUESTA PUES ESTOY EN VARIAS COSAS AHORITA PERO NO QUIERO ESTORBAR EL FORO CON ESTA PREGUNTA ABIERTA ASI QUE LA DAMOS POR CERRADA

Edited by: AlexMeza on Jan 25, 2011 5:25 PM

felipe_loyolarodriguez
Active Contributor
0 Kudos

OK

Buscare mas info acerca de SET V/S SELECT en declarecion de variables.

Aqui se hace mencion, por las dudas ---> [http://vyaskn.tripod.com/differences_between_set_and_select.htm]

Atte.

Edited by: Floyola on Jan 25, 2011 1:38 PM

former_member188440
Active Contributor
0 Kudos

Te comento lo siguiente

veo que necesitas hacer un select top 1 para que no te mande el error pues la variable no podra almacenar mas de 1 resultado, supongo que ese error no te lo manda si metes un solo articulo en la pdn1

Tambien te comento que para validar la longitud necesitarias un



if LEN(@numeroserie)>15

para validar si pasa o no de 15 caracteres

Otra opcion para que te traiga un solo resultado es que utilices un count en el primer select, donde traes el numero de serie

por ejemplo


DECLARE @cuenta as numeric  (15)
       SET @cuenta = (SELECT count (T0.DistNumber)
                                         FROM OSRN T0
			             		LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
				         WHERE T1.DocEntry = @list_of_cols_val_tab_del and LEN           (t0.distnumber)>15)

IF @cuenta>=1
               BEGIN
                       SET @error = 103
                       SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
       END

algo asi

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas Alex

Prueba esta validacion


-- NUMEROS DE SERIE DE LARGO (15)
 
IF  (@object_type = 20)  and @transaction_type IN ('A','U')
BEGIN
 
-- Numero de Serie 1
 
	DECLARE @NumSeries as NVarchar (15)
	SET @NumSeries = (SELECT Len(T0.DistNumber)
				FROM OSRN T0
				LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
				WHERE T1.DocEntry = @list_of_cols_val_tab_del)
 
	IF (@NumSeries > '15')
		BEGIN
			SET @error = 103
			SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
		END
END

-- NUMEROS DE SERIE DE LARGO (15)
 
IF  (@object_type = 20)  and @transaction_type IN('A','U')
BEGIN
 
-- Numero de Serie 2
 
	DECLARE @NumSeries2 as NVarchar (15)
	SET @NumSeries2 = (SELECT Len(T0.U_DistNumber2)
				FROM OSRN T0
				LEFT JOIN PDN1 T1 ON T0.ItemCode = T1.ItemCode
				WHERE T1.DocEntry = @list_of_cols_val_tab_del)
       
 
	IF (@NumSeries2 > '15')
		BEGIN
			SET @error = 103
			SET @error_message = 'El Numero de Serie Ingresado es Incorrecto'
		END
END

Saludos

Edited by: Floyola on Jan 25, 2011 1:09 PM

Edited by: Floyola on Jan 25, 2011 1:10 PM