簡體   English   中英

沒有總行的SQL級別分頁

[英]SQL level paging without total rows

是否可以轉換以下腳本,以便可以直接從ADO .NET調用它? 我不希望它是一個存儲過程,並且如果它使轉換變得更容易,則不需要TotRows

DECLARE @startRow INT ; SET @startrow = 50
;WITH cols
AS
(
    SELECT table_name, column_name, 
        ROW_NUMBER() OVER(ORDER BY table_name, column_name) AS seq, 
        ROW_NUMBER() OVER(ORDER BY table_name DESC, column_name desc) AS totrows
    FROM [INFORMATION_SCHEMA].columns
)
SELECT table_name, column_name, totrows + seq -1 as TotRows
FROM cols
WHERE seq BETWEEN @startRow AND @startRow + 49
ORDER BY seq

從C#使用內聯SQL所需要做的唯一一件事就是使用參數而不是局部變量。

像這樣

using(SqlConnection cnn = GetAConnection())
{
    string sql = @"WITH cols
        AS
        (
        SELECT table_name, column_name, 
            ROW_NUMBER() OVER(ORDER BY table_name, column_name) AS seq, 
            ROW_NUMBER() OVER(ORDER BY table_name DESC, column_name desc) AS totrows
        FROM [INFORMATION_SCHEMA].columns
        )
        SELECT table_name, column_name, totrows + seq -1 as TotRows
        FROM cols
        WHERE seq BETWEEN @startRow AND @startRow + 49
        ORDER BY seq";

   SqlCommand cmd = new SqlCommand(sql,cnn);
   cmd.Parameters.AddWithValue("@startRow",50);

   cnn.Open();
   using(SqlDataReader rdr = cmd.ExecuteReader())
   {

         //Do something with the reader here.
   }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM