Sql 选择第n行并将其分配给变量

Sql 选择第n行并将其分配给变量,sql,sql-server,Sql,Sql Server,我想选择第n行并将其分配给一个变量。到目前为止,我有: DECLARE @LEVEL INT; DECLARE @COUNT INT = 14; DECLARE @A INT = 1; SET @LEVEL = (SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY Q_Total) AS rownumber, Q_Response FROM #Qtemp) AS name WHERE r

我想选择第n行并将其分配给一个变量。到目前为止,我有:

  DECLARE @LEVEL INT;   
  DECLARE @COUNT INT = 14;
  DECLARE @A INT = 1;       

    SET @LEVEL = (SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Q_Total) AS rownumber, Q_Response 
    FROM #Qtemp) AS name WHERE rownumber = @COUNT - @A);
select查询似乎有效,但我发现以下错误:

信息116,16级,状态1,第176行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式

我正在做的是可能的还是有其他方法可以做到这一点?
谢谢

您的代码有错误。将“选择结果”指定给值时,结果集中必须包含一列。改为

DECLARE @LEVEL INT;   
  DECLARE @COUNT INT = 14;
  DECLARE @A INT = 1;       

    SET @LEVEL = (SELECT  Q_Response FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Q_Total) AS rownumber, Q_Response 
    FROM #Qtemp) AS name WHERE rownumber = @COUNT - @A);
如果您使用SQL 2012,那么它可能会简化

DECLARE @LEVEL INT;   
DECLARE @COUNT INT = 14;
DECLARE @A INT = 1;       

SELECT @LEVEL = Q_Response FROM  #Qtemp
ORDER BY Q_Total
OFFSET @COUNT - @A ROWS FETCH FIRST 1 ROW ONLY

将列别名移到“as name(rownumber,Q_Response)”?当您说将第n行赋值给变量时,您的意思是将第n行的值赋值给变量吗?在这种情况下,将
SELECT*FROM…
更改为
SELECT FROM…