• Domingo 22 de Diciembre de 2024, 22:50

Autor Tema:  Error con variable dentro de SP_EXECUTESQL  (Leído 1625 veces)

Hijack

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Error con variable dentro de SP_EXECUTESQL
« en: Viernes 5 de Junio de 2009, 23:40 »
0
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

syricardo

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Error con variable dentro de SP_EXECUTESQL
« Respuesta #1 en: Martes 23 de Junio de 2009, 15:35 »
0
hola
      la verdad no tengo experiencia en el uso del sp_executesql, sin embargo, en una prueba q hice, m daba el mismo error si ponia:

       
Código: SQL
  1. sp_executesql 'select * from tProveedores'
  2.  

        pero andaba bien si lo cambiaba por

       
Código: SQL
  1. sp_executesql N'select * from tProveedores'
  2.  

saludos

PD: el peso de una letra :P