FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con Store Procedure en SQL SERVER
Hola, tengo el siguiente Store Procedure en SQL SERVER el cual me convierte de Hexadecimal a Decimal, el problema es el siguiente que este Store Procedure debe de actualizar una tabla conviertiendo las filas del campo Hexadecimal a Decimal pero cuando lo ejecuto dura horas ejecutandose y no actualiza la tabla este es el codigo:
CREATE PROCEDURE [CONVERTIR_HEXADECIMAL] AS DBCC CHECKIDENT (Codigos, RESEED, 0) -----------CONVERTIR SERIE DE HEX-DEC---------------------------- DECLARE @TRECORDS as int ,@ROW as int, @DEC as varchar(20),@Hex char(8), @Hex1 char(8),@Hex2 char(8),@Longitud int,@counter int,@ch char(1),@num int, @P int,@DEC1 INT,@DEC2 INT SET @TRECORDS =(SELECT MAX(Num_FILA) FROM Codigos) SET @ROW = 1 WHILE @ROW<=@TRECORDS BEGIN SET @HEX =(SELECT UPPER(SERIE_HEXADECIMAL) FROM Codigos WHERE Num_FILA=@ROW) SET @DEC='' -----------Convertir la primera parte de la serie a Decimal---------------------------- SET @HEX1=SUBSTRING(@HEX,1,2) SET @Longitud=len(@HEX1) SET @counter=2 SET @P=0 SET @DEC1 =0 SET @num = 0 WHILE @counter>=1 BEGIN set @ch = substring(@HEX1,@counter,1) if @ch = 'A' set @num=10 else if @ch = 'B' set @num=11 else if @ch = 'C' set @num=12 else if @ch = 'D' set @num=13 else if @ch = 'E' set @num=14 else if @ch = 'F' set @num=15 else if @ch between '0' and '9' set @num =cast(substring(@HEX1,@counter,1) as int) SET NOCOUNT ON SET @DEC1 = @DEC1 + @num * POWER(16, @P) SET @counter = @counter - 1 SET @P=@P+1 SET NOCOUNT OFF END -----------Convertir la segunda parte de la serie a Decimal---------------------------- SET @HEX2=SUBSTRING(@HEX,3,6) SET @Longitud=len(@HEX2) SET @counter=6 SET @P=0 SET @DEC2 =0 SET @num = 0 WHILE @counter>=1 BEGIN set @ch = substring(@HEX2,@counter,1) if @ch = 'A' set @num=10 else if @ch = 'B' set @num=11 else if @ch = 'C' set @num=12 else if @ch = 'D' set @num=13 else if @ch = 'E' set @num=14 else if @ch = 'F' set @num=15 else if @ch between '0' and '9' set @num =cast(substring(@HEX2,@counter,1) as int) SET NOCOUNT ON SET @DEC2 = @DEC2 + @num * POWER(16, @P) SET @counter = @counter - 1 SET @P=@P+1 SET NOCOUNT OFF END if len(@DEC1)< 3 set @DEC = substring('00000000',1,3-len(@DEC1))+cast(@DEC1 AS varchar(3)) else set @DEC = cast(@DEC1 AS varchar(3)) if len(@DEC2)< 8 set @DEC =@DEC+substring('00000000',1,8-len(@DEC2))+cast(@DEC2 AS varchar(8)) else set @DEC = @DEC +cast(@DEC2 as varchar(8)) UPDATE Codigos SET SERIE_DECIMAL=@DEC WHERE Num_FILA=@ROW SET @ROW=@ROW + 1 END GO Que podria estar sucediendo?? |
#2
|
|||
|
|||
una duda para que utilizas el comando DBCC CHECKIDENT si no insertas nada en el registro?
intentaste debugear el procedimiento? en el query analizer dale F8 (mostrar el object browser) localiza el procedimiento click derecho sobre el y en el pop up a lo ultimo te aparece la opcion de debug asi podras darte cuenta en donde se tarda a modo de sugerencia: no seria mejor que el procedimiento de convertir a hesadecimal lo pasaras a una funcion que le mandes el string del hexa y te regrese el decimal algo asi como: Código SQL [-]CREATE FUNCTION fn_HEXtoDEC (hexa varchar (100)) RETURNS decimal (38,8) para usar algo como: Código SQL [-]UPDATE Codigos SET SERIE_DECIMAL= dbo.fn_HEXtoDEC(SERIE_HEXADECIMAL) saludos |
#3
|
|||
|
|||
Gracias Sinalocarlo,
pero una pregunta cuando retorna el valor decimal en la funcion" RETURNS decimal (38,8) que seria esto, el 38,8???, pues la manera como aqui calculamos la serie decimal es tomando de los 8 caracteres de la serie hexadecimal los primeros 2 que equivale a 3 digitos o caracteres decimales y luego los demas que serian los 6 caracteres hexadecimales restantes y que equivaldrian a los 9 caracteres siguientes de la serie decimal pues tenemos un total por default de 11 caracteres para decimal y 8 para hexadecimal. Realice el Debug y se queda corriendo tambien bastante tiempo lo cual tengo que pararlo sin retorname nada. |
#4
|
|||
|
|||
Bueno ahora que acabo de abortar el proceso me dice
'@ RETURN_VALUE = n/a' PERO MAS NADA. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con entrecomillado en sentencia select in dentro de un Store Procedure | Caballero Negro | MS SQL Server | 3 | 12-01-2007 03:46:37 |
Migrar Store procedure Interbase a Msq Sql Server 2000 | mrh_peru | MS SQL Server | 1 | 09-12-2006 21:51:06 |
Store procedure php | jorgito | MySQL | 1 | 06-06-2006 09:55:12 |
Emplear Store Procedure | La__X | Conexión con bases de datos | 5 | 19-01-2006 03:03:13 |
store procedure | ronimaxh | Firebird e Interbase | 2 | 24-06-2003 21:20:22 |
|