9

リンクサーバーで実行するためにMicrosoftSQLServerで作成されたSQLスクリプトを、SQLプロシージャで使用できるスクリプトに変換しようとしています。使用しているスクリプトは

ROW_NUMBER() OVER(ORDER BY [FIELDS])

自動インクリメントに依存しない主キーを作成するには、コードをプロシージャとして保存しようとすると、このエラーが発生します

エラー1064(42000):SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、[LINENO]行の「(ORDERBY [FIELDS])」の近くで使用する正しい構文を確認してください。

明らかに、エラーはROW_NUMBER OVERが正しくないことを示しています。これは、OVERビットを削除し、ROW_NUMBERが未定義であるというエラーが発生したためです。

私が検索するところはどこでも、INSERTステートメントではなくSELECTステートメントについてこの質問をする人しかいません。ほとんどの場合、答えは行数を取得するか、最後のIDを挿入することです。したがって、作成に使用できるのはROW_NUMBER()がMicrosoftServerにあるのと同じデータ

4

1 に答える 1

18

残念ながら、ROW_NUMBER()MySQLには同等のものはありませんが、行ごとに値を増分する値を保持する単純な変数を作成することで、それをシミュレートできます。

例:

SET @rank=0;
SELECT   @rank := @rank+1 AS rank, fruit, amount
FROM     sales
ORDER BY amount DESC;
于 2012-08-15T03:46:26.470 に答える