1

我必须在一个 excel 文档中创建多个 excel 表才能输入另一个旧系统。此代码无法修改的旧系统不接受任何数据大小超过 10 MB 的工作表。

目前我有一个手动过程,通过 sql 查询获取所有数据,然后我将其转储到一个临时工作簿中,然后将其分成多个工作簿,以便每个工作簿不超过 10 MB。然后,我将这些工作簿中的每张工作表整理成一个包含多张工作表的大工作簿。

我现在想通过使用单个查询来简化这个多阶段过程,只要返回的所有记录的总大小不超过 10 MB,就可以从表中获取所有记录。我还希望能够使用 sql 查询指定要返回的下一个 10MB 数据。在这里创建一个小程序不是一个选项。我在查询中指定的列数可以更改。我希望能够只使用 SQL 查询来做到这一点。

可以使用 SQL Server 2008 完成类似的操作吗?

4

2 回答 2

1

您可以使用临时表并EXEC sp_spaceused 'tablename'估计可以放入 10MB 空间的行数,然后您可以使用ROW_NUMBER()来设置分页。

我很想知道是否有更好的方法来做你感兴趣的事情。

于 2013-07-08T15:46:48.433 回答
1

我建议您修复每个工作簿的记录数并使用row_number()

select seqnum / 100000 as WhichWorksheet, <columns you want>
from (select s.*, row_number() over (order by (select NULL)) as seqnum
      from (<your subquery here>) s
     ) s

(这假设您希望每个工作表上有 100000 行。)

您可以尝试猜测 SQL Server 中每一行的大小。但是,弄清楚 10 MB 的含义是具有挑战性的——您是指 Excel 测量的 10 MB 吗?您是指 CSV 文件中的 10 MB 吗?你的意思是数据库存储有 10 MB 吗?或者,您可以忽略这些问题并选择一些过去有效的行,然后继续做其他事情。

于 2013-07-08T15:50:59.673 回答