有谁知道从C#分页调用GetSchema的方法?

时间:2016-08-09 20:44:19

标签: c# sql-server pagination

我正在使用ADO.NET提供程序功能" GetSchema"从Sql Server数据库(以及Informix系统)中获取元数据,并想知道是否有分页结果。我问,因为其中一个系统有超过3,000个表(是的,三千个)和两倍的视图,让我们甚至不谈论存储过程。 毋庸置疑,尝试一次性删除该列表对于我运行的VM来说太多了(只有4GB的内存)。我已经知道可以应用的限制,这些都是" dbo"中的所有表格。架构,所以我没有意识到在结果集到达我的客户端之前限制结果集。

1 个答案:

答案 0 :(得分:0)

我建议使用更灵活的INFORMATION_SCHEMA系统视图,而不是使用GetSchema。这些视图已经划分了有关Tables,StoredProcedures和Views的信息,您可以编写特定的查询来以分页的方式检索数据。

例如,要检索前100行表名,您可以编写像这样的查询

SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY TABLE_NAME) AS RowNum, *
          FROM      INFORMATION_SCHEMA.TABLES
        ) AS TableWithRowNum
WHERE   RowNum >= 0
    AND RowNum < 100
ORDER BY RowNum

可以轻松准备以下查询,更改查询使用的最小值和最大值。

可以对StoredProcedures(使用INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE')或使用INFORMATION_SCHEMA.VIEWS

的视图应用相同的代码

注意,如果您使用的是Sql Server 2012及更高版本,则可以重写第一个查询以使用此语法

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
ORDER BY TABLE_NAME 
OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY

C#代码也可以使用FIRST(0)和COUNT(100)值的参数