首先,我很抱歉我的英语不好,不是我的语言。
我的问题是:我有一张约有1000万条银行交易记录的表格。它不具备PK,也不像任何列那样排序。
我的工作是创建一个页面来过滤并将其导出到csv。但是导出Csv的行数限制大约为200万条记录。
我有一些想法:
创建800个800台ATM表(只是一个想法,我知道它是愚蠢的)并且每天1次从主表发送数据=>导出到800文件csv
使用Linq每次获得100k记录,然后下次,我跳过这些。但是当Skip
命令需要OrderBy
并且我得到OutOfMemoryException
db.tblEJTransactions.OrderBy(u => u.Id).Take(100000).ToList()
任何人都可以帮助我,欢迎任何想法(我的老板说我可以使用任何东西,包括创建数百个表,使用Nosql ...)
答案 0 :(得分:1)
如果您的表中没有主键,请添加一个。
最简单,最简单的方法是添加int IDENTITY
列。
ALTER TABLE dbo.T
ADD ID int NOT NULL IDENTITY (1, 1)
ALTER TABLE dbo.T
ADD CONSTRAINT PK_T PRIMARY KEY CLUSTERED (ID)
如果您无法更改原始表格,请创建副本。
一旦表有主键,您就可以按它排序并选择200K行的块/页,并且结果可预测。
答案 1 :(得分:0)
我不确定我的解决方案。但你可以参考并尝试一下:
select top 1000000 *, row_number() over (order by (select null)) from tblEJTransactions
以上查询返回排序列表。
然后你可以使用Linq来获得结果。