Suponiendo que está usando SQL 2005 o posterior:
SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY GETDATE()) AS d
para ordenar las filas tal como se devuelven desde la base de datos. Si desea especificar una orden, puede hacerlo a:
SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY dbo.a) AS d
Para SQL 2000 y anteriores se necesita un valor único para ordenar por:
SELECT dbo.a, dbo.b, dbo.c, (SELECT COUNT(*) FROM dbo d2 WHERE d2.a <= dbo.a) AS d
FROM dbo
o si no es necesario un solo SELECT :
SELECT IDENTITY(int,1,1) ID, dbo.a, dbo.b, dbo.c
INTO #Temp
FROM dbo
SELECT * FROM #Temp
SQL Server 2000 debe ser retirado pronto - incluso la versión 2005 no está soportado oficialmente por MS más .... –