将rownumber()作为查询的一部分返回

时间:2016-01-27 15:27:28

标签: c# sql-server datatable

我有一个SQL查询,它返回到数据表dtStories(c#)。

with records as (select row_number() over (order by pages.createdate desc)as 'row', 
field1, field2...etc. from records where row between 1 and 7

(在其他情况下,我需要“第n”行或x& y行之间,因此我没有使用简单的选择前7个查询。)

我试图根据它的行来做稍微不同的事情,所以我在查询row [0],认为这将有行号。但是,检查我的SQL Server中的返回,它实际上只返回字段1,字段2 ...等显然为什么我的

foreach (Datarow row in dtStories)
{
  if (row[0].ToString() == "1")
  {
     ...
  }
}

不起作用。

有没有办法确保将行作为SQLQuery的一部分返回到DataTable中,还是使用c#只访问表的row1,row2等?

2 个答案:

答案 0 :(得分:3)

您不会显示整个选择语句,因此了解您实际在做什么是不可能的。我们可以告诉您,因为()不匹配。

我希望你的代码(缩进以明确)看起来像这样:

with records as 
(
   select row_number() over (order by pages.createdate desc)as 'row', 
          field1, field2 -- ...
   from original_table
)
select  
    field1, field2 -- ...
from records
where row between 1 and 7

现在应该很清楚......在第二个选择列表中包含你需要的行列(在CTE之外)

with records as 
(
   select row_number() over (order by pages.createdate desc)as 'row', 
          field1, field2 -- ...
   from original_table
)
select  row, -- here!
    field1, field2 -- ...
from records
where row between 1 and 7

答案 1 :(得分:0)

不明白你的with records ..是sql server还是c#代码。不看sql因为没有右括号而且没有选择。

WITH调用CTE,CTE在内存中临时创建。

你想要像

这样的东西
 with records as 
    (
      select row_number() over ....
    )
 SELECT *
 FROM records