Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在SQL Server中使用行号时出错?_Sql_Sql Server - Fatal编程技术网

为什么在SQL Server中使用行号时出错?

为什么在SQL Server中使用行号时出错?,sql,sql-server,Sql,Sql Server,我已经编写了以下SQL代码以在我的SQL Server上运行 SELECT atd.DeviceID, ROW_NUMBER() over(order by atd.deviceid) as rownumber FROM dbo.Devices atd WHERE (rownumber between 11 and 20); 我得到以下输出: 味精207,16级,状态1,第5行 列名“rownumber”无效。 味精207,16级,状态1,第5行 列名“row

我已经编写了以下SQL代码以在我的SQL Server上运行

SELECT 
   atd.DeviceID, 
   ROW_NUMBER() over(order by atd.deviceid) as rownumber
FROM 
   dbo.Devices atd  
WHERE 
  (rownumber between 11 and 20);
我得到以下输出:

味精207,16级,状态1,第5行
列名“rownumber”无效。
味精207,16级,状态1,第5行
列名“rownumber”无效

如您所见,我想使用
ROW\u NUMBER
只获取通常由查询返回的行的子集。我以前从未使用过
行号
功能


我做错了什么?

您不能直接使用列的别名,请将其包装在派生表或CTE上:

SELECT *
FROM (  SELECT DeviceID, 
        ROW_NUMBER() over(order by deviceid) as rownumber
        FROM dbo.Devices) atd 
WHERE (rownumber between 11 and 20);


运行答案中给出的第一个查询会导致以下错误:
无法绑定多部分标识符“atd.DeviceID”
@Daniel只需去掉DeviceID列的atd前缀。Downvoter,Downvoter是否仅仅是因为列上的前缀?
;WITH CTE AS
(
    SELECT DeviceID, 
    ROW_NUMBER() over(order by deviceid) as rownumber
    FROM dbo.Devices
)
SELECT *
FROM CTE 
WHERE (rownumber between 11 and 20);