2012-08-15 77 views
9

我试图将Microsoft SQL Server中创建的SQL脚本转换为可以在SQL过程中使用的脚本运行的脚本,我使用的脚本使用ROW_NUMBER()在MySQL中等效于插入

ROW_NUMBER() OVER(ORDER BY [FIELDS]) 

创建一个主键是不依赖于自动递增,当我尝试和代码保存为一个程序我得到这个错误

ERROR 1064(42000):您有一个错误在您的SQL语法中:检查与您的MySQL服务器版本相对应的手册,以在'line(ORDER BY [FIELDS])'附近使用正确的语法[LINENO]

明显的错误是说,ROW_NUMBER OVER是不正确的,因为我删除的OVER位,并得到一个错误,指出ROW_NUMBER是不确定的

我到处寻找我得到什么,但人问这个问题对于SELECT语句而言,不是INSERT语句,大多数情况下的答案只是获取行数或获取最后插入的ID,所以我可以使用什么来创建与ROW_NUMBER()在Microsoft Server

中相同的数据
+0

这是说,'OVER'函数的参数无效。 – 2012-08-15 03:40:55

+0

@ColeJohnson:OVER并不在MySQL中,我通过在Google中搜索来检查它,并且只有得到了MSDN的链接,即使参数是正确的,它可能会给出与ROW_NUMBER相同的消息或两者之间的语法错误函数......和是的脚本工作在Microsoft SQL Server因为我运行它,因为它只使用链接服务器我使脚本从使用链接服务器实际运行使其更好地运行在服务器本身 – 2012-08-15 04:08:01

+0

我想插入到一个表中的行号,我不能使用INSERT INTO [TABLE] VALUES(@ rank + 1)原因,只会让我1每次不允许一个主键,我试过@row + = 1 – 2012-08-15 04:10:03

回答

18

不幸的是,在MySQL中没有ROW_NUMBER()等价物,但您仍然可以通过创建一个简单的变量,每行保存一个值。

例子:

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

它不会返回行号,如1,2,3 ...。它正在返回1,2,9,11 ...这不是我想要的 – 2016-01-02 21:39:01