cancel
Showing results for 
Search instead for 
Did you mean: 

Declare cursor

marco_ramirez
Active Contributor
0 Kudos

Expertos, acudo por su ayuda

tengo el siguiente código de un cursor que necesito para validar el campo TaxCode en la tabla QUT1, me valida muy bien la primera fila, pero en la segunda fila me dice que el cuerso no existe. agradezco su ayuda para resolverlo.

saludos

 if (@object_type='23')and (@transaction_type = 'A' or @transaction_type = 'U') begin
Declare @TaxCode nvarchar (3)
Declare cTaxCode cursor for 
	Select T0.TaxCode 
	from QUT1 T0 
	where Docentry = @list_of_cols_val_tab_del 

open cTaxCode
Inicio:
FETCH NEXT FROM cTaxCode
INTO @TaxCode
	WHILE @@FETCH_STATUS = 0
		begin
		If @TaxCode is null or @TaxCode = '' begin
		select @error = 1
		Select @error_message = 'Seleccione indicador de Impuestos (IVA ó EXE)'
		Close cTaxCode
		Deallocate cTaxCode
		goto Fin
FETCH NEXT FROM cTaxCode
INTO @TaxCode
goto Inicio
End
End
end
Close cTaxCode
Deallocate cTaxCode


--------------------------------------------------------------------------------------------------------------------------------
Fin:
-- Select the return values
select @error, @error_message

end

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hola, el problema se presenta por que estas Cerrando y Eliminando el Cursor justo despues que realiza el primer ciclo, ya para el segundo no existe.

if (@object_type='23')and (@transaction_type = 'A' or @transaction_type = 'U') begin
Declare @TaxCode nvarchar (3)
Declare @Line int
Set @Line=1
Declare cTaxCode cursor for 
	Select T0.TaxCode 
	from QUT1 T0 
	where Docentry = @list_of_cols_val_tab_del 
 
open cTaxCode
FETCH NEXT FROM cTaxCode
INTO @TaxCode
	WHILE @@FETCH_STATUS = 0
		begin
		          If @TaxCode is null or @TaxCode = '' begin
		            select @error = 1
		            Select @error_message = 'Seleccione indicador de Impuestos (IVA ó EXE) linea:' +@Line
		           -- Close cTaxCode--> ACA ESTAS CERRANDO EL CURSOR     ERROR
		           -- Deallocate cTaxCode--> ACA ESTAS ELIMINANDO EL CURSOR    ERROR
		        end --IF
                        set @line=@line+1
                        FETCH NEXT FROM cTaxCode
                        INTO @TaxCode
                End --WHILE
Close cTaxCode
Deallocate cTaxCode

por favor testear.

Saludos

marco_ramirez
Active Contributor
0 Kudos

Gracias Jorge

Estaré probando el código

saludos

marco_ramirez
Active Contributor
0 Kudos

Hice las pruebas y no fueron satisfactorias, sin embargo, después de unas modificaciones al código me ha funcionado de perlas

aqui comparto el código. saludos a todos

 if (@object_type='23')and (@transaction_type = 'A' or @transaction_type = 'U')
begin
	Declare @TaxCode nvarchar (3)	
	Declare cTaxCode cursor for 
		Select T0.TaxCode 
		from QUT1 T0 
		where Docentry = @list_of_cols_val_tab_del 

	Open cTaxCode
	FETCH NEXT FROM cTaxCode INTO @TaxCode
	WHILE @@FETCH_STATUS = 0
		begin
			If @TaxCode is null or @TaxCode = '' 
			begin
				select @error = 1
				Select @error_message = 'Seleccione indicador de Impuestos (IVA ó EXE)'
				Close cTaxCode
				Deallocate cTaxCode
				goto Fin
			End
		FETCH NEXT FROM cTaxCode INTO @TaxCode
		End
Close cTaxCode
Deallocate cTaxCode
end