2012-08-15 6 views
9

Ich versuche SQL-Skripts zu konvertieren, die in Microsoft SQL Server erstellt wurde, um mit einem Link-Server zu Skripten, die in SQL-Prozeduren verwendet werden können, verwendet das Skript ich bin verwendetROW_NUMBER() Äquivalent in MySQL zum Einfügen

ROW_NUMBER() OVER(ORDER BY [FIELDS]) 

einen Primärschlüssel zu erstellen, die auf Auto Increment nicht abhängig ist, wenn ich versuche, und den Code als Prozedur speichern ich diesen Fehler

eRROR 1064 (42000) erhalten: Sie haben einen Fehler haben in Ihrer SQL-Syntax: Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax in der Nähe von '(ORDER BY [FIELDS])' zu verwenden [LINENO]

offensichtlich wird die Fehlermeldung, dass ROW_NUMBER OVER i die OVER-Bit entfernt nicht richtig Ursache ist und einen Fehler bekam sagen, dass ROW_NUMBER

überall undefiniert war ich suche ich bekomme nichts, aber die Menschen diese Frage für SELECT-Anweisung, nicht INSERT-Anweisungen und die Antworten die meiste Zeit sind nur entweder die Anzahl der Zeilen erhalten oder die letzte ID eingefügt, also was ich kann ich verwenden, um die gleichen Daten, die ROW_NUMBER() in Microsoft Server

erstellen würde
+0

Es sagt, dass die 'OVER' Funktion ungültige Argumente hat. –

+0

@ColeJohnson: OVER ist in MySQL sowieso nicht, ich habe es in Google gesucht und habe nur Links zu MSDN, auch wenn das Argument richtig war würde es wahrscheinlich die gleiche Nachricht wie ROW_NUMBER oder einen Syntaxfehler zwischen den 2 geben Funktionen ...... und ja das Skript funktioniert in Microsoft SQL Server, weil ich es darin ausgeführt habe, da es nur den Link Server benutzt, mache ich das Skript besser laufen, indem ich es von der Verwendung eines Verbindungsservers verschiebe, um tatsächlich benutzt zu werden im Server selbst –

+0

Ich versuche, die Zeilennummer in eine Tabelle einfügen, kann ich nicht INSERT INTO [TABELLE] VALUES (@ Rang + 1) Ursache, dass ich nur jedes Mal bekomme ich 1, was nicht erlaubt ist ein Primärschlüssel und ich habe versucht @row + = 1 –

Antwort

18

Leider gibt es kein ROW_NUMBER() Äquivalent in MySQL, aber Sie können es immer noch simulieren, indem Sie erstellen eine einfache Variable, die einen Wert in jeder Zeile enthält.

Beispiel:

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

Es gibt keine Zeilennummern wie 1,2,3 .... Es kommt 1,2,9,11 zurück ... Das will ich nicht –