Tengo una consulta SQL que se devuelve a una tabla de datos 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

(Hay otros casos en los que necesitaré una fila "n-ésima" o entre filas x e y, por lo tanto, no estoy usando una simple consulta de selección de las 7 principales).

Estaba tratando de hacer cosas ligeramente diferentes según la fila que era, por lo que estaba consultando la fila [0] pensando que tendría el número de fila. Pero, al verificar los retornos en mi SQL Server, en realidad solo devuelve el campo 1, campo 2 ... etc que es obviamente la razón por la que mi

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

No funciona

¿Hay alguna manera de asegurarse de que la fila se devuelva como parte de SQLQuery en la DataTable, o usando c # solo acceda a la fila1, fila2, etc. de la tabla?

1
Dave 27 ene. 2016 a las 18:27

2 respuestas

La mejor respuesta

No muestra la declaración de selección completa, por lo que es IMPOSIBLE saber qué está haciendo realmente. Podemos decir esto porque ( y ) no coinciden.

Espero que su código (sangrado para aclarar) se vea así:

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

Ahora debería estar claro ... para incluir la columna de la fila que necesita en la segunda lista de selección (fuera del 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
3
Hogan 27 ene. 2016 a las 15:32

No entiendo si su with records .. es un servidor SQL o un código C #. No parece sql porque no tiene paréntesis de cierre y no tiene selección.

WITH es llamada CTE y CTE se crean temporalmente en la memoria.

Quieres algo como

 with records as 
    (
      select row_number() over ....
    )
 SELECT *
 FROM records
0
Juan Carlos Oropeza 27 ene. 2016 a las 15:32