我正在寻找执行此复杂操作的策略。
我们以前有一个使用NHibernate的解决方案,它可以用于少量数据,但现在它的速度太慢了。
客户端将带有卡ID的文件上传到系统中,文件最多可包含~150 + k卡ID,这些ID分配给客户组。
要么插入单个记录,要么他的状态发生变化 表例如
+++++++++++++++++++++++++++++++++++
|card_id* | card_group_id* |state |
| 11112 | meow | 0 |
| 11131 | meow | 1 |
+++++++++++++++++++++++++++++++++++
某些ID可能违反PK /三个FK中的一个,并且这些ID应该返回给客户。
所以我基本上需要执行一次一次一次插入,“是否有效?好的。如果没有,请添加到失败的ID列表。”
您能否建议我实现这一目标的策略?
我不能容忍数据丢失就像1个错误的ID在同一个语句中失败了另一个1000的操作,它需要有点快所以客户端没有'挨饿等待结果通知。
后端是基于ASP.NET的,在SQL Server 2012中有数据库。
答案 0 :(得分:1)
使用正确的工具完成工作。在这种情况下是SSIS,可能是Merge Transformation。从两个源(一个表,另一个文件)创建合并,然后取两个输出,插入不匹配并插入匹配的错误。 SSIS将为您提供批处理,批量插入,输入文件解析等等。
不要尝试在直接SQL中执行此操作,处理150k输入记录远非微不足道,您最终将编写一次性应用程序,而不是使用现成的组件。
答案 1 :(得分:1)