sql - 当您通过将结果限制为 500 条记录且表没有主键的 API 访问时,如何从表中提取每一行?
问题描述
我们的 CRM 有一个 API,允许我们运行 SQL 查询,但将结果限制为 500 条记录。我们需要从具有超过 500 条记录的某些表中获取每一行。
到目前为止,我对某些表的解决方法是查询最低主键、最高主键,然后按主键一次运行 500 条记录的查询,并不断重复和添加每个结果集,直到达到最高的主键(然后将所有这些表加在一起)。但是有些表没有主键。有没有办法一次提取 500 条记录,直到整个表都被拉出?这是 SQL 服务器。
lowestPKQuery = "SELECT TOP 1 " + pkColumn + " FROM " + tableToDump + "ORDER BY " + pkColumn + " ASC";
highestPKQuery = "SELECT TOP 1 " + pkColumn + " FROM " + tableToDump + " ORDER BY " + pkColumn + " DESC";
initialRecordCountQuery = "SELECT count(" + pkColumn + ") FROM " + tableToDump;
// then, populate a dictionary that covers every range by intervals of 500
query = "SELECT " + columnsToSelect + " FROM " + tableToDump + " WHERE " + pkColumn + " BETWEEN " + range.Key + " AND " + range.Value + " ORDER BY " + pkColumn + " ASC";
// after all the tables have been pulled, then add all of those tables together
在没有主键的情况下,有没有办法只使用 SQL 最终拉取整个表,一次 500 条记录?它基本上是一个 REST API,它允许我们运行几乎任何 SQL 语句(除了记录删除或表创建),但无论什么查询,它只会返回 500 条记录(在 XML 文档中)。
解决方案
如果您正在使用and ,您可以使用FETCH
and从旧版本中获取数据。OFFSET
SQL Server 2012+
ROW_NUMBER()
您可以尝试如下查询来获取数据。
带有主键的表
SELECT *
FROM
<Your_Table>
ORDER BY
pkColumn
OFFSET 0 ROWS
FETCH NEXT 500 ROWS ONLY
现在继续增加OFFSET
500 直到你没有得到任何记录。
没有主键的表
对于没有任何主键的表,你需要有一个适当的列,ORDER BY
它可以是日期列或多列的组合,否则这种方法将不起作用。
例如
SELECT *
FROM
<Your_Table>
ORDER BY
CreatedDate
OFFSET 0 ROWS
FETCH NEXT 500 ROWS ONLY
推荐阅读
- python - 使用自定义绘图标题时,“plotly.subplots”中的注释会中断
- javascript - 追踪“className.indexOf”javascript错误
- xcode11 - 如何将 Xcode 环境变量从 Target 传递到其依赖项
- c++ - 如何在 C++ 预处理中处理 __VA_ARGS__?
- azure-devops - 需要在 Azure DevOps 中记录项目截止日期 - 有没有办法在项目信息中添加字段?
- java - 查找和 DI 定义一个具体的 org.springframework.web.reactive.function.client.WebClient
- c# - Blazor:获取“ActionContext”
- string - PowerBI:将过滤表与变量字符串进行比较返回一个空表
- bash - 如何根据给定的前缀将多个文件从一个 s3 复制到另一个 s3?
- java - springboot中如何在一个项目中映射不同数据库的不同查询?