2012-08-15 4 views
9

sto provando a convertire gli script SQL che sono stati creati in Microsoft SQL Server per l'esecuzione con un collegamento sever agli script che possono essere utilizzati in SQL Procedures, lo script su cui sono in usoROW_NUMBER() equivalente in MySQL per l'inserimento di

ROW_NUMBER() OVER(ORDER BY [FIELDS]) 

per creare una chiave primaria che non dipende incremento automatico, quando provo e salvare il codice come una procedura ottengo questo errore

eRROR 1064 (42000): Hai un errore nella tua sintassi SQL: controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a '(ORDER BY [FIELDS])' alla riga [LINENO]

ovviamente l'errore sta dicendo che ROW_NUMBER OLTRE non è giusta causa ho rimosso la punta sopra e ottenuto un errore dicendo che ROW_NUMBER era indefinito

ovunque che cerco io ottenere nulla, ma gente che chiede a questa domanda per l'istruzione SELECT, non le istruzioni INSERT e le risposte la maggior parte delle volte si tratta solo di ottenere il numero di righe o di ottenere l'ultimo ID inserito, quindi cosa posso usare per creare gli stessi dati che ROW_NUMBER() avrebbe in Microsoft Server

+0

Si sta dicendo che la funzione di 'sopra' ha argomenti non validi. –

+0

@ColeJohnson: OVER non è in MySQL in ogni caso, ho controllato effettuando una ricerca in Google e ottenuto solo collegamenti a MSDN, anche se l'argomento era corretto, probabilmente avrebbe dato lo stesso messaggio di ROW_NUMBER o un Errore di sintassi tra i 2 funzioni ...... e sì lo script funziona in Microsoft SQL Server perché l'ho eseguito in quanto, dal momento che utilizza solo il server di link, sto facendo girare meglio lo script spostandolo dall'utilizzo di un server di collegamento per essere effettivamente utilizzato nel server stesso –

+0

sto provando ad INSERIRE il numero di riga in una tabella, non posso usare INSERT INTO [TABLE] VALUES (@ rank + 1) perché mi proverò 1 ogni volta che non è permesso per una chiave primaria e ho provato @row + = 1 –

risposta

18

Sfortunatamente, non esiste l'equivalente ROW_NUMBER() in MySQL ma è comunque possibile simularlo creando una semplice variabile che contiene un valore e incrementa ogni riga.

Esempio:

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

Non restituisce numeri di riga come 1,2,3 .... Restituisce 1,2,9,11 ... Non è quello che voglio –