从不可解析的表SQL Server查询和导出

时间:2017-04-05 02:52:31

标签: c# sql .net sql-server-2008

首先,我很抱歉我的英语不好,不是我的语言。

我的问题是:我有一张约有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 ...)

2 个答案:

答案 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来获得结果。