• Viernes 8 de Noviembre de 2024, 14:36

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Hijack

Páginas: [1]
1
SQL Server / Error con variable dentro de SP_EXECUTESQL
« en: Viernes 5 de Junio de 2009, 23:40 »
Buenos días y gracias desde ya. Leí anonimamente por mucho tiempo la web, y aquí estoy con mi primer duda.

El inconveniente lo tengo al ejecutar una cadena por medio de sp_executesql

El código es un tanto extenso y muy poco ortodoxo, lo sé, es por eso que les comento la idea.
Es un proceso almacenado a ejecutarse periódicamente. El SP acepta 3 variables las cuales son sector, unidad y pcrc. Luego declaro una cadena a ejecutarse, esta cadena va a comparar datos de una tabla con la misma tabla copiada del periodo anterior. La idea es sacar casos "nuevos" que hayan ingresado en esta ultima actualización. El código que realiza esto funciona a la perfección. Lo he probado sin hacer el Store Procedure dinámico y anduvo sin problema.
El inconveniente lo tengo aquí ahora en la parte final (update) cuando intento realizar todo desde la cadena (quiero aclarar que el update siempre anduvo sin problemas. Como recién dije, el inconveniente se presenta ahora al ejecutarse como un SP dinámico)

Aquí va el código.

------------------------------------------------------------------

CREATE PROCEDURE SP_TIEMPO_MEDIO_XHORA  
   @sector nvarchar(20),
   @unidad nvarchar(20),
   @pcrc nvarchar(20)
as
   
declare @cadena nvarchar(3000)
declare @select nvarchar(1000)
declare @update nvarchar(1000)

set @update = 'update tiempo_medio set ingresos_del_dia = ingresos_del_dia + @bandera, total = ingresos_del_dia + inicio WHERE fecha = (CONVERT (nvarchar(15), getdate(),103)) and un = ''' +@unidad+ ''' and sector = ''' +@sector+ ''' and pcrc = ''' +@pcrc+ ''''
set @select = 'select linea, fecha_instancia from tmo_total where unidad = ''' +@unidad+ ''' and bo = ''' +@sector+ ''' and gestion = ''' +@pcrc+ ''''
--comienzo cadena
set @cadena = 'declare @linea nvarchar(10), @fecha datetime, @linea_v nvarchar(10), @fecha_v datetime
   DECLARE @Cursor CURSOR
   declare @bandera int
   set @bandera = 0
   set @cursor = cursor for ' +@select+ '
   open @cursor
   FETCH NEXT FROM @cursor into @linea, @fecha
   WHILE @@FETCH_STATUS = 0
   BEGIN
       set @linea_v = (select linea from tmo_total_copia where linea = @linea and fecha_instancia = @fecha)
          set @fecha_v = (select fecha_instancia from tmo_total_copia where linea = @linea and fecha_instancia = @fecha)
          if (@linea_v IS NULL and @fecha_v IS NULL)
      begin    
         set @bandera = @bandera + 1
      end
          FETCH NEXT FROM @Cursor
          INTO @linea, @fecha
   END;

    EXEC sp_executesql ' +@update+ ' --aqui tiraría el error aparentemente

   CLOSE @Cursor;
   DEALLOCATE @Cursor;'
   --fin cadena
EXEC sp_executesql @cadena
GO

------------------------------------------------------------------


Ejecuto el SP con lo siguiente.

exec sp_tiempo_medio_xhora bo, negocios, diag --bo, negocios, diag son los parametros que le proveo al sp.

y el error es el siguiente

Msg 201, Level 16, State 10, Procedure sp_executesql, Line 20
Procedure 'sp_executesql' expects parameter '@statement', which was not supplied.


He googleado el error en busca de pistas pero no eh encontrado nada. Quiero aclarar que probé variantes para el problema. Intenté declarar y setear la variable update dentro de cadena, pero he obtenido también un error.

Cualquier ayuda es bienvenida. Gracias

Páginas: [1]