Seleccionar 5 ultimos registros en orden ascendente...
    
		    Buenas, repito aquà una pregunta que he hecho en la sección de SQL Server para ver si alguien me la puede resolver aquÃ...
Quiero hacer una consulta desde un "Stored Procfedure" en SQL Server que me devuelva los últimos 5 registros de una tabla pero en orden ascendente...
He provado el famoso TOP 5, pero si le pongo el ORDER BY ... ASC me da los primeros registros de la tabla, si no pongo nada también me dan los cinco primeros y si le pongo ORDER BY DESC, me salen los últimos cinco tal cómo quiero, pero en orden descendente...
Entonces he probado de hacer una SubQuery para primero recojer los 5 últimos registros y luego reordenarlos en orden ascendente, cómo el caso de muestra posterior...
SELECT * FROM (SELECT TOP 5 Nombre_Cancion, Autor_Cancion
FROM dbo.Canciones
WHERE (Id_Estilo = "Rock_And_Roll")
ORDER BY Id_Cancion DESC) AS TABLA_VIRTUAL
ORDER BY ID_Cancion ASC
Esto me funciona, y efectivamente me da el resultado de los últimos cinco registros ordenados de menor a mayor por su id... bien, el caso es que cómo que el valor de filtrado (en este caso "Id_Estilo") viene dado dinamicamente por la peticion desde el servidor, al cambiar el valor concreto de "Rock_And_Roll" por un "@Estilo_Id" (que será el receptor del id del estilo musical seleccionado), resulta que me da un eror de sintaxis, por lo que la siguiente sentencia ya no funciona...
SELECT * FROM (SELECT TOP 5 Nombre_Cancion, Autor_Cancion
FROM dbo.Canciones
WHERE (Id_Estilo = @Estilo_Id)
ORDER BY Id_Cancion DESC) AS TABLA_VIRTUAL
ORDER BY ID_Cancion ASC
Pues eso... se admiten sugerencias. Me consta que con TRANSACT-SQL se pueden hacer virguerÃas de estas y cosas mucho más complejas, pero es que de momento tan solo me manejo bien con SQL clásico.
Muchas gracias de antemano
    Quiero hacer una consulta desde un "Stored Procfedure" en SQL Server que me devuelva los últimos 5 registros de una tabla pero en orden ascendente...
He provado el famoso TOP 5, pero si le pongo el ORDER BY ... ASC me da los primeros registros de la tabla, si no pongo nada también me dan los cinco primeros y si le pongo ORDER BY DESC, me salen los últimos cinco tal cómo quiero, pero en orden descendente...
Entonces he probado de hacer una SubQuery para primero recojer los 5 últimos registros y luego reordenarlos en orden ascendente, cómo el caso de muestra posterior...
SELECT * FROM (SELECT TOP 5 Nombre_Cancion, Autor_Cancion
FROM dbo.Canciones
WHERE (Id_Estilo = "Rock_And_Roll")
ORDER BY Id_Cancion DESC) AS TABLA_VIRTUAL
ORDER BY ID_Cancion ASC
Esto me funciona, y efectivamente me da el resultado de los últimos cinco registros ordenados de menor a mayor por su id... bien, el caso es que cómo que el valor de filtrado (en este caso "Id_Estilo") viene dado dinamicamente por la peticion desde el servidor, al cambiar el valor concreto de "Rock_And_Roll" por un "@Estilo_Id" (que será el receptor del id del estilo musical seleccionado), resulta que me da un eror de sintaxis, por lo que la siguiente sentencia ya no funciona...
SELECT * FROM (SELECT TOP 5 Nombre_Cancion, Autor_Cancion
FROM dbo.Canciones
WHERE (Id_Estilo = @Estilo_Id)
ORDER BY Id_Cancion DESC) AS TABLA_VIRTUAL
ORDER BY ID_Cancion ASC
Pues eso... se admiten sugerencias. Me consta que con TRANSACT-SQL se pueden hacer virguerÃas de estas y cosas mucho más complejas, pero es que de momento tan solo me manejo bien con SQL clásico.
Muchas gracias de antemano
-- INICIO DEL CODIGO
CREATE PROCEDURE pr_ListaMiCancion
@Estilo_Id VARCHAR(20) --Dependera del valor
AS
SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(100)
SET @SQLString = N'SELECT * FROM (SELECT TOP 5 Nombre_Cancion, Autor_Cancion
FROM dbo.Canciones
WHERE (Id_Estilo = '''+@Estilo_Id+''')
ORDER BY Id_Cancion DESC) AS TABLA_VIRTUAL
ORDER BY ID_Cancion ASC'
EXEC pr_executesql @SQLString
-- FIN DEL CODIGO
¿Como se ejecuta?
EXECUTE pr_ListaMiCancion 'BLUES'
		    MuchÃsimas gracias!!!... de momento no he logrado hacerlo funcionar pues tengo que adaptarlo al caso concreto para el que lo necesito (que es más complejo que el caso didáctico de las canciones). Y encima, cómo no tengo ni idea de Transact, pues eso, que algún dÃa tenÃa que ser el primero... aúnque de todas maneras, agradezco la situación que me obliga a tener que espabilarme en esta nueva faceta del SQL
Espero poderlo tener funcionando para mañana, ya te contaré que tal ha Ãdo...
    Espero poderlo tener funcionando para mañana, ya te contaré que tal ha Ãdo...
