Hay varios threads en internet acerca de como simular row_number en sql 2000
http://stackoverflow.com/questions/4...ql-server-2000
Ahora el porque de los 1024 registros, sencillo, tu funcion regresa 32 registros, estas ejecutando el while 32 veces 32*32=1024, lo que pasa es que en la funcion no tienes un discriminativo, por lo que cada vez que ejecuta la funcion regresa los 32 registros, y en tu insert tienes que inserte todo lo que regresa la funcion.