Principales respuestas
Variables en consultas sql server

Pregunta
-
Buen dia estoy tratando de que al ejecutarse el anterior query se cree una tabla pero con el valor de la variable @Linea no hice esta prueba pero me sale error. alguien puede ayudarme por faUSE PLANING
DECLARE @HORAINICIO DATETIME; DECLARE @HORAFINAL DATETIME; DECLARE @LINEA INT; SET @HORAINICIO ='20170403'; SET @HORAFINAL ='20170428'; SET @LINEA = 103; select Id,Nodo,Coche,ViajeLinea,OrdenViaje,HoraTeorica,HoraReferencia,HoraLlegada,HoraSalida, case when HoraSalida = 0 then '0' else HoraSalida end as H_REAL, CASE WHEN HoraSalida-(select s1.Horasalida from SmartCalculoPuntoaPuntoes s1 where s1.Id=s.id-1)< 0 THEN 0 ELSE HoraSalida-(select s1.Horasalida from SmartCalculoPuntoaPuntoes s1 where s1.Id=s.id-1) END AS T_VIAJE , (SELECT FLOOR (HoraSalida/60)) H_PASO INTO @LINEA from SmartCalculoPuntoaPuntoes s where ViajeLinea <> 0 and Fecha BETWEEN @HORAINICIO AND @HORAFINAL and Línea = @LINEA order by Id
Respuestas
-
Si es posible pero debes considerar dos cosas:
- El identificador 103 no es válido porque atenta contra la regla de los identificadores, por tanto debes delimitar el identificador mediante corchetes [], por ejemplo: SELECT * FROM [103]
- La instrucción SELECT INTO no espera por una variable, por tanto 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.
USE PLANING; DECLARE @FechaInicio date = '20170403'; DECLARE @FechaFin date = '20170428'; DECLARE @Linea int = 103; DECLARE @ConsultaSQL nvarchar(4000) = N' SELECT Id, Nodo, Coche, ViajeLinea, OrdenViaje, HoraTeorica, HoraReferencia, HoraLlegada, HoraSalida, CASE WHEN HoraSalida - LAG(Horasalida, 1, Horasalida) OVER(ORDER BY Id) < 0 THEN 0 ELSE HoraSalida - LAG(Horasalida, 1, Horasalida) OVER(ORDER BY Id) END AS T_VIAJE, FLOOR(HoraSalida / 60) H_PASO INTO ' + QUOTENAME(@Linea) + 'FROM SmartCalculoPuntoaPuntoes s WHERE ViajeLinea <> 0 AND Fecha BETWEEN @FechaInicio AND @FechaFin AND Línea = @Linea ORDER BY Id;' --Revisar la consulta sql generada --SELECT @ConsultaSQL EXECUTE sp_executesql @ConsultaSQL, N'FechaInicio date, @FechaFin date, @Linea int', @FechaInicio, @FechaFin, @Linea --Probar resultados SELECT * FROM [103]; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta MC BAMBAM martes, 18 de julio de 2017 23:21
Todas las respuestas
-
Hola Wiliam Morales , gracias por tu interés y colaboración, mira lo que quiero hacer que que después de ejecutarse la consulta se cree una tabla con los resultados de la consulta, pero quiero que esa tabla quede con un nombre asignado a una variable @LINEA, EN mi ejemplo @LINEA guarda el valor de '103' así debería llamarse la tabla. esa es la forma como lo estoy haciendo No se si a exista un mejor camino . Mil gracias
-
Si es posible pero debes considerar dos cosas:
- El identificador 103 no es válido porque atenta contra la regla de los identificadores, por tanto debes delimitar el identificador mediante corchetes [], por ejemplo: SELECT * FROM [103]
- La instrucción SELECT INTO no espera por una variable, por tanto 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.
USE PLANING; DECLARE @FechaInicio date = '20170403'; DECLARE @FechaFin date = '20170428'; DECLARE @Linea int = 103; DECLARE @ConsultaSQL nvarchar(4000) = N' SELECT Id, Nodo, Coche, ViajeLinea, OrdenViaje, HoraTeorica, HoraReferencia, HoraLlegada, HoraSalida, CASE WHEN HoraSalida - LAG(Horasalida, 1, Horasalida) OVER(ORDER BY Id) < 0 THEN 0 ELSE HoraSalida - LAG(Horasalida, 1, Horasalida) OVER(ORDER BY Id) END AS T_VIAJE, FLOOR(HoraSalida / 60) H_PASO INTO ' + QUOTENAME(@Linea) + 'FROM SmartCalculoPuntoaPuntoes s WHERE ViajeLinea <> 0 AND Fecha BETWEEN @FechaInicio AND @FechaFin AND Línea = @Linea ORDER BY Id;' --Revisar la consulta sql generada --SELECT @ConsultaSQL EXECUTE sp_executesql @ConsultaSQL, N'FechaInicio date, @FechaFin date, @Linea int', @FechaInicio, @FechaFin, @Linea --Probar resultados SELECT * FROM [103]; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta MC BAMBAM martes, 18 de julio de 2017 23:21
-