2016-01-27 4 views
1

У меня есть SQL-запрос, который возвращается в datStable dtStories (C#).return rownumber() как часть запроса

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 

(Есть и другие случаи, когда я буду нуждаться «п--й» строкой или между й & Y строками, поэтому я не использую простой выбор топ 7 запроса.)

Я пытался делайте несколько разные вещи, основываясь на том, какая строка была, поэтому я запрашивал строку [0], думая, что у нее будет номер строки. Но, проверяя возвращаемые данные в моем SQL Server, он фактически возвращает поле 1, поле 2 ... и т. д., что, очевидно, почему мой

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

не работает.

Есть ли способ, чтобы убедиться, что строка возвращается как часть SQLQuery в DataTable или использует C# только для доступа к row1, row2 и т. Д. Таблицы?

+2

Ваш вопрос не очень понятно. Что ты пытаешься сделать? –

ответ

3

вы не показываете весь оператор select, поэтому НЕВОЗМОЖНО знать, что вы на самом деле делаете. Мы можем это сказать, потому что ( и ) не совпадают.

Я ожидаю, что ваш код (с отступом, чтобы ясно) выглядит примерно так:

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 

теперь должно быть понятно ... чтобы включить столбец строки вам это нужно во 2-м списке выбора (вне КТР)

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 
+0

Вы правы - да извините, плохая копия, которая действительно была моим кодом, и я глупо забыл выбрать строку в последней части. Спасибо. – Dave

0

не понимаю, если ваш with records .. является SQL Server или C# код. Не выглядит sql, потому что не имеет закрывающей круглой скобки и не имеет выбора.

WITH - это вызов CTE, а CTE временно создаются в памяти.

Вы хотите что-то вроде

with records as 
    (
     select row_number() over .... 
    ) 
SELECT * 
FROM records 
Смежные вопросы