2012-08-15 26 views
9

Estoy tratando de convertir scripts SQL que se crearon en Microsoft SQL Server para ejecutar con un servidor de enlaces a scripts que se pueden usar en Procedimientos SQL, el script que estoy usando esROW_NUMBER() equivalente en MySQL para insertar

ROW_NUMBER() OVER(ORDER BY [FIELDS]) 

para crear una clave principal que no depende de incremento automático, cuando intento guardar el código como un procedimiento me sale este error

eRROR 1064 (42000): Usted tiene un error en su sintaxis de SQL: consulte el manual que corresponde a su versión de servidor MySQL para la sintaxis correcta para usar cerca de '(ORDER BY [FIELDS])' en la línea [NUMLINEA]

, obviamente, el error está diciendo que ROW_NUMBER SOBRE no es causa correcta quité el bit de una y dio un error diciendo que ROW_NUMBER era indefinido

todas partes busco me sale nada más que la gente que pide esta pregunta para la instrucción SELECT, no las instrucciones INSERT y las respuestas la mayoría de las veces son solo obtener el número de filas o insertar la última identificación, entonces qué puedo usar para crear los mismos datos que ROW_NUMBER() en el servidor de Microsoft

+0

Se dice que la función 'OVER' tiene argumentos válidos. –

+0

@ColeJohnson: OVER no está en MySQL de todos modos, lo comprobé buscando en Google y solo obtuve enlaces a MSDN, incluso si el argumento fuera correcto, probablemente daría el mismo mensaje que ROW_NUMBER o un Error de sintaxis entre los 2 funciones ... y sí, la secuencia de comandos funciona en Microsoft SQL Server, porque la ejecuté, ya que solo usa el servidor de enlaces, estoy haciendo que la secuencia de comandos funcione mejor moviéndola de un servidor de enlaces a una realidad. en el servidor en sí –

+0

estoy tratando de INSERTAR el número de fila en una tabla, no puedo usar INSERT INTO [TABLE] VALUES (@ rank + 1) porque eso me va a dar 1 cada vez que no está permitido una clave principal y lo he intentado @row + = 1 –

Respuesta

18

Desafortunadamente, no hay ROW_NUMBER() equivalente en MySQL, pero aún puede simularlo creando una variable simple que contiene un valor y lo incrementa cada fila.

Ejemplo:

SET @rank=0; 
SELECT @rank := @rank+1 AS rank, fruit, amount 
FROM  sales 
ORDER BY amount DESC; 
+1

No devuelve números de fila como 1,2,3 .... Está volviendo 1,2,9,11 ... Eso no es lo que quiero –