Con SQL Server 2005 usa la función ROW_NUMBER():
Código:
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS Num,
Producto
FROM Productos
Con SQL Server 2000 y siempre considerando que el número de registros devuelto por la consulta no sea demasiado elevado, usa la función IDENTITY para numerar los resultado e insertarlos en una tabla temporal:
Código:
SELECT IDENTITY(INT, 1,1) AS Num,
Producto
INTO #temp_Productos
FROM Productos
SELECT *
FROM #temp_Productos
DROP TABLE #temp_Productos