[英]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.