Tsql 具有200万行的批更新表
大家好,我有一个有趣的任务来更新一个表中大约有200万行的一列。我曾经尝试使用MVC实体框架来实现这一点,但是我遇到了“内存不足异常”,我只是想知道是否还有其他方法 有趣的是,这不仅仅是一个简单的更新。程序需要读取表中已有的Tsql 具有200万行的批更新表,tsql,sql-server-2008,asp.net-mvc-3,c#-4.0,entity-framework-4,Tsql,Sql Server 2008,Asp.net Mvc 3,C# 4.0,Entity Framework 4,大家好,我有一个有趣的任务来更新一个表中大约有200万行的一列。我曾经尝试使用MVC实体框架来实现这一点,但是我遇到了“内存不足异常”,我只是想知道是否还有其他方法 有趣的是,这不仅仅是一个简单的更新。程序需要读取表中已有的TelephoneNumber列,例如0148112001。然后,它需要根据大于1的出现次数计算该数字的分数。例如,使用上面的数字,这将得到6分,因为我们有3x1和3x0,总共得到6分 计算此分数后,需要将此数字插入当前行的a列中,以便进行处理,因此在本例中,电话号码为014
TelephoneNumber
列,例如0148112001
。然后,它需要根据大于1的出现次数计算该数字的分数。例如,使用上面的数字,这将得到6分,因为我们有3x1和3x0,总共得到6分
计算此分数后,需要将此数字插入当前行的a列中,以便进行处理,因此在本例中,电话号码为0148112001的行为
这可能是使用TSQL实现的,还是继续使用我的实体框架方法更好?对于这样的批量更新,我总是建议在服务器上执行此操作-拖动200万行,更新单个列,然后再将其推回服务器,这真的没有意义
我认为根据您的描述,创建一个小的T-SQL用户定义函数来计算这个分数应该相当简单。一旦有了它,就可以发出一条T-SQL语句:
UPDATE dbo.YourTable
SET Score = dbo.fnCalculateScore(TelephoneNumber)
WHERE .... (whatever condition you might have) .....
这应该比实体框架方法快几个数量级….您是否至少可以提供您尝试执行的操作以及发生内存不足异常的位置的som EF代码?嗯。。。。。根据我有限的数学计算,这个数字0148112001
正好有3个大于1的密码出现-有一个4
,一个8
和一个2
。。。这个分数如何得到6的值???