none
Variebles como nombres de tablas RRS feed

  • Pregunta

  • Buen dia estoy trabando de ejecutar un querry con el nombre de una tabla que esta guardado en una variable,

    DECLARE @Linea int = 103;
    DECLARE @FASE1 NVARCHAR(100) = CONCAT('ESTUDIO_RUTA_',@LINEA,'_FASE1');
    print @FASE1
     -------------------------------
     select distinct d.NODO_REAL,
    
       ( SELECT  distinct PERCENTILE_CONT(0.10) WITHIN GROUP(ORDER BY d4.T_VIAJE )
    						 OVER (PARTITION BY d.NODO_REAL)  
    						  from @FASE1 d4 WHERE d.NODO_REAl = d4.NODO_REAl and    d4.H_PASO = '4' and d4.T_VIAJE<>0  and not d4.T_VIAJE is null ) AS '4-10%',
    
       (SELECT  distinct PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY p4.T_VIAJE )
    						 OVER (PARTITION BY d.NODO_REAL)  
    						  from @FASE1 p4 WHERE d.NODO_REAl = p4.NODO_REAl and    p4.H_PASO = '4' and p4.T_VIAJE<>0  and not p4.T_VIAJE is null ) AS '4-95%'
    
    
      from @FASE1 d 
      order by d.NODO_REAL		
    Pero me aparece la variable "@fase1" como error y dice que falta declarar la variable. te agradezco si me puedes ayudar
    miércoles, 26 de julio de 2017 22:26

Respuestas

  • La cláusula FROM no espera por una variable, debes concatenar en una cadena las instrucciones sql necesarias para cumplir con lo que requieres y luego intentar ejecutar las instrucciones mediante el procedimiento almacenado sp_executesql.

    DECLARE @Linea int = 103;
    DECLARE @FASE1 NVARCHAR(100) = CONCAT('ESTUDIO_RUTA_', @LINEA, '_FASE1');
    
    DECLARE @ConsultaSQL nvarchar(4000) = N'
        SELECT 
    	   DISTINCT d.NODO_REAL,
    	   (SELECT DISTINCT 
    		  PERCENTILE_CONT(0.10) WITHIN GROUP(ORDER BY d4.T_VIAJE ) 
    		  OVER (PARTITION BY d.NODO_REAL)  
    	   FROM ' + QUOTENAME(@FASE1) + ' d4 
    	   WHERE d.NODO_REAl = d4.NODO_REAl AND d4.H_PASO = ''4'' AND d4.T_VIAJE<>0  
    		  AND d4.T_VIAJE IS NOT NULL) AS [4-10%],
    	  (SELECT DISTINCT 
    		  PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY p4.T_VIAJE) 
    		  OVER (PARTITION BY d.NODO_REAL)  
    	   FROM ' + QUOTENAME(@FASE1) + ' p4 
    	   WHERE d.NODO_REAl = p4.NODO_REAl AND p4.H_PASO = ''4'' AND p4.T_VIAJE <> 0  
    		  AND p4.T_VIAJE IS NOT NULL) AS [4-95%]
        FROM ' + QUOTENAME(@FASE1) + ' d 
        ORDER BY d.NODO_REAL';
    
    --Revisar la consulta sql generada
    --SELECT @ConsultaSQL
    
    EXECUTE sp_executesql @ConsultaSQL;
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta MC BAMBAM jueves, 27 de julio de 2017 18:34
    jueves, 27 de julio de 2017 0:32
  • No se pueden usar variables para referenciar identificadores de tablas en la clausula FROM. Deberas recurrir a SQL dinamico para lograrlo tal como se sugirio en otra respuesta.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Marcado como respuesta MC BAMBAM jueves, 27 de julio de 2017 18:34
    jueves, 27 de julio de 2017 12:46

Todas las respuestas

  • La cláusula FROM no espera por una variable, debes concatenar en una cadena las instrucciones sql necesarias para cumplir con lo que requieres y luego intentar ejecutar las instrucciones mediante el procedimiento almacenado sp_executesql.

    DECLARE @Linea int = 103;
    DECLARE @FASE1 NVARCHAR(100) = CONCAT('ESTUDIO_RUTA_', @LINEA, '_FASE1');
    
    DECLARE @ConsultaSQL nvarchar(4000) = N'
        SELECT 
    	   DISTINCT d.NODO_REAL,
    	   (SELECT DISTINCT 
    		  PERCENTILE_CONT(0.10) WITHIN GROUP(ORDER BY d4.T_VIAJE ) 
    		  OVER (PARTITION BY d.NODO_REAL)  
    	   FROM ' + QUOTENAME(@FASE1) + ' d4 
    	   WHERE d.NODO_REAl = d4.NODO_REAl AND d4.H_PASO = ''4'' AND d4.T_VIAJE<>0  
    		  AND d4.T_VIAJE IS NOT NULL) AS [4-10%],
    	  (SELECT DISTINCT 
    		  PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY p4.T_VIAJE) 
    		  OVER (PARTITION BY d.NODO_REAL)  
    	   FROM ' + QUOTENAME(@FASE1) + ' p4 
    	   WHERE d.NODO_REAl = p4.NODO_REAl AND p4.H_PASO = ''4'' AND p4.T_VIAJE <> 0  
    		  AND p4.T_VIAJE IS NOT NULL) AS [4-95%]
        FROM ' + QUOTENAME(@FASE1) + ' d 
        ORDER BY d.NODO_REAL';
    
    --Revisar la consulta sql generada
    --SELECT @ConsultaSQL
    
    EXECUTE sp_executesql @ConsultaSQL;
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta MC BAMBAM jueves, 27 de julio de 2017 18:34
    jueves, 27 de julio de 2017 0:32
  • No se pueden usar variables para referenciar identificadores de tablas en la clausula FROM. Deberas recurrir a SQL dinamico para lograrlo tal como se sugirio en otra respuesta.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Marcado como respuesta MC BAMBAM jueves, 27 de julio de 2017 18:34
    jueves, 27 de julio de 2017 12:46