Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 如何在执行批量插入时发出select查询_Sql_Sql Server_Batch File - Fatal编程技术网

Sql 如何在执行批量插入时发出select查询

Sql 如何在执行批量插入时发出select查询,sql,sql-server,batch-file,Sql,Sql Server,Batch File,在对同一个表执行批插入时,我有一个关于如何处理对表的sql查询的问题 我有一个ASP.NET web应用程序,它创建了许多对象(可能有50000个),这些对象使用nHibernate以批处理方式插入到表中。即使有了Nhibernate优化,这也需要两分钟的时间。我在隔离级别设置为ReadCommitted的数据库事务中执行此操作 在批插入期间,web应用程序中的客户端必须能够读取此表中以前创建的数据。但是,它们不应该能够读取未限制的数据。我的问题是,如果我对select查询使用隔离级别“read

在对同一个表执行批插入时,我有一个关于如何处理对表的sql查询的问题

我有一个ASP.NET web应用程序,它创建了许多对象(可能有50000个),这些对象使用nHibernate以批处理方式插入到表中。即使有了Nhibernate优化,这也需要两分钟的时间。我在隔离级别设置为ReadCommitted的数据库事务中执行此操作

在批插入期间,web应用程序中的客户端必须能够读取此表中以前创建的数据。但是,它们不应该能够读取未限制的数据。我的问题是,如果我对select查询使用隔离级别“read committed”,它们会超时,因为它们正在等待批插入作业完成

是否有任何方法可以以这种方式查询数据库,以便查询快速运行并返回表中所有提交的行,而无需等待批插入作业完成?我不想返回任何未提交的数据

我已经测试过将隔离级别设置为“快照”,这似乎解决了我的问题,但这是最好的方法吗


Best Alives Wismiscal

快照隔离返回事务开始之前存在的数据,并且不会锁定表,因此不会阻塞。它还忽略了其他锁定事务,因此在您的场景中,它听起来最适合您。它的意思是,由于您的数据被插入到一个批中,因此在该批完成之前,该批中的任何数据都不会对SELECT语句可用(即

  • 时间1:表中存在数据集A
  • 时间2:批处理开始将数据集B插入表中(但不提交)
  • 时间3:应用程序获取快照,并读取数据集A
  • 时间4:应用程序完成对数据集A(仅数据集A)的重试
  • 时间5:批完成数据集B的写入;数据集A和数据集B是 两者都可以在表中找到

您是否可以选择将批次拆分为几个较小的批次,这样就需要几秒钟,而不是几分钟,然后独立提交?不幸的是,在这种情况下,必须是全部或无。谢谢。我将使用快照隔离级别!