none
CURSORES Y SU APLICACION RRS feed

  • Pregunta

  • HOLA REALICE LA SIGUIENTE CONSULTA EN SQL,

    DECLARE @EmpENK AS nvarchar(400)

    DECLARE EmpresasENK CURSOR FOR SELECT distinct 'EK_ADM'+ID_Empresa_S+'_11'     
      FROM [SINDY].[dbo].[TPC_OBRA_SECUNDARIA_Integrador] TPC
      where TPC.estatus = '1'
    OPEN EmpresasENK
    FETCH NEXT FROM EmpresasENK INTO @EmpENK
    while @@fetch_status = 0
    BEGIN
         PRINT @EmpENK

        
        select DISTINCT  ENKONTROL.Clave_compania,ENKONTROL.Nombre,  ENKONTROL.obra ,  ENKONTROL.numpro , ENKONTROL.NomProveedor,TPC.Estatus  from(
    SELECT distinct Clave_compania,Nombre,obra ,nombre_obra,numpro,NomProveedor
    FROM OPENQUERY ( @EmpENK , '  SELECT X.Clave_compania, X.Nombre, A.obra, A.nombre_obra
      ,MP.numpro,P.nombre as NomProveedor
      From dba.su_obras A
      left outer join dba.datos_compania X on ''1'' = ''1''
      left outer join dba.su_obras O on O.obra = A.obra
      left outer join dba.sp_movprov MP on MP.cc = O.num_compras
      left outer join dba.sp_proveedores P on P.numpro = MP.numpro
      where (A.status= ''P'' or A.status=''A'') and A.obra <> ''999'' order by A.obra ')
      )ENKONTROL
      inner join Sindy.dbo.TPC_OBRA_SECUNDARIA_Integrador TPC on ( TPC.ID_Empresa_S= ENKONTROL.Clave_compania and TPC.ID_Obra_S = ENKONTROL.obra )
      WHERE TPC.Estatus ='1'
    --  and CLAVE_COMPANIA = @EmpENK
      ORDER BY CLAVE_COMPANIA DESC, OBRA, NUMPRO
     


      FETCH NEXT FROM EmpresasENK INTO @EmpENK  
    END
      CLOSE  EmpresasENK
    DEALLOCATE EmpresasENK

    la parte donde pongo openquery va un dato, el @EmpENK, mi pregunta o duda es como va la sintaxis correcta para que esa parte tome el valor actual del @EmpENK y no la palabra @EmpENK en si... no se como y me serviria de mucho

    viernes, 27 de julio de 2018 19:28

Todas las respuestas

  •  como va la sintaxis correcta para que esa parte tome el valor actual del @EmpENK y no la palabra @EmpENK en si...

    La documentación del OPENQUERY

    https://docs.microsoft.com/en-us/sql/t-sql/functions/openquery-transact-sql?view=sql-server-2017

    dice expresamente que el OPENQUERY no admite parámetros. Solo se le puede pasar un nombre fijo.

    Esto limita seriamente tus opciones para codificarlo. Vas a tener que usar SQL dinámico. Básicamente, tienes que concatenar toda la consulta en un NVarchar, en el que puedes concatenar el valor de @EmpENK:

    Declare @sql NVARCHAR(4000) = '... OPENQUERY(' + @EmpENK + ',  ''SELECT ...'

    y luego ejecutas esa variable que hemos llamado @sql mediante una llamada a sp_executesql.

    sábado, 28 de julio de 2018 11:09