将查询从MySQL转换为SQL Server

时间:2014-05-29 19:05:12

标签: mysql sql sql-server

我正在尝试将MySQL查询转换为SQL Server。

SELECT
@a:= @a + 1 serial_number,
    a.id,
    a.file_assign_count 
FROM usermaster a,
    workgroup_master b,
    (
        SELECT @a: = 0
    ) AS c
WHERE a.wgroup = b.id
    AND file_assign_count > 0

我理解:= MySQL中的运算符将值赋给变量&立即返回值。但是如何在SQL Server中模拟这种行为?

1 个答案:

答案 0 :(得分:3)

SQL Server 2005及更高版本支持标准ROW_NUMBER()功能,因此您可以这样做:

SELECT ROW_NUMBER() OVER (ORDER BY xxxxx) AS serial_number,
    a.id,
    a.file_assign_count
FROM usermaster a
JOIN workgroup_master b ON a.wgroup = b.id
WHERE file_assign_count > 0

重新评论:我编辑了以上内容以显示OVER子句。如果您定义排序顺序,则行编号仅具有任何含义。您的原始查询没有这样做,这意味着它由RDBMS决定返回行的顺序。

但是当使用ROW_NUMBER()时,你必须具体。在我放置xxxxx的位置,您可以放置​​一个列或表达式来定义排序顺序。请参阅the documentation中的说明和示例。


子查询设置@a:=0仅用于初始化该变量,并且无论如何都不需要将其加入查询中。它只是一些开发人员使用的风格。在SQL Server中不需要这样做,因为当您可以使用ROW_NUMBER()时,根本不需要用户变量。

如果SQL Server数据库返回MySQL数据库返回一行的两行,则数据必须不同。因为ROW_NUMBER()或MySQL用户变量都不会限制返回的行数。


P.S。:请使用JOIN语法。它自1992年以来一直是标准的。