Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用大量数据、可能的密钥冲突和错误列表返回执行令人讨厌的插入/更新_Sql_Sql Server - Fatal编程技术网

Sql 如何使用大量数据、可能的密钥冲突和错误列表返回执行令人讨厌的插入/更新

Sql 如何使用大量数据、可能的密钥冲突和错误列表返回执行令人讨厌的插入/更新,sql,sql-server,Sql,Sql Server,我正在为这个复杂的操作寻找一种策略。 我们曾经有一个使用NHibernate的解决方案,它可以处理少量的数据,但是现在它太慢了 客户端将带有卡ID的文件上载到系统中,该文件最多可包含分配给客户组的150+k卡ID 一条记录要么被插入,要么状态改变。 表 +++++++++++++++++++++++++++++++++++ |card_id* | card_group_id* |state | | 11112 | meow | 0 | | 11131

我正在为这个复杂的操作寻找一种策略。
我们曾经有一个使用NHibernate的解决方案,它可以处理少量的数据,但是现在它太慢了

客户端将带有卡ID的文件上载到系统中,该文件最多可包含分配给客户组的150+k卡ID

一条记录要么被插入,要么状态改变。

+++++++++++++++++++++++++++++++++++  
|card_id* | card_group_id* |state |   
|  11112  |       meow     |  0   |
|  11131  |       meow     |  1   |
+++++++++++++++++++++++++++++++++++ 
某些ID可能违反PK/三个FK中的一个,这些ID应返回给客户端

所以我基本上需要执行一次一次的插入,“它工作了吗?好的。如果没有,添加到失败的ID列表。”

你能给我一个实现这一目标的策略吗?

I无法容忍数据丢失就像一个坏ID在同一条语句中又失败了1000次操作一样,它需要稍微快一点,这样客户端就不会在等待结果通知时饿死


后端基于ASP.NET,数据库位于SQL Server 2012中。

请使用正确的工具执行此作业。在本例中是SSI,并且可能是。从两个源(一个是表,另一个是文件)创建一个合并,然后获取两个输出,插入不匹配的,并插入匹配的错误。SSIS将为您提供批处理、大容量插入、输入文件解析等更多功能

不要试图在纯SQL中实现这一点,处理150k输入记录绝非易事,最终您将编写一个一次性应用程序,而不是使用现成的组件。

将数据保存到,然后使用一个

问题:

  • 又快又脏

  • 光标性能


使用Bulkinsert将数据添加到无约束的临时表中,并合并到最终表中。将未插入的返回到前端。