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