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 server 一次执行多个查询_Sql Server_Database_Entity Framework - Fatal编程技术网

Sql server 一次执行多个查询

Sql server 一次执行多个查询,sql-server,database,entity-framework,Sql Server,Database,Entity Framework,我正在使用EntityFramework处理MS SQL数据库 在我的数据库中有表users和三个表A、B、C,其中包含用户数据。它们中的每一个都有行版本类型的列版本。更新行时,数据库正在用较大的数字更新此记录 用户正在向我发送其数据的版本-一个数字:userVersion。作为响应,我需要从这三个表向他发送数据,其中version高于userVersion。我可以使用三个查询来实现这一点: var listA = Entities.As.where(... && a.versi

我正在使用EntityFramework处理MS SQL数据库

在我的数据库中有表users和三个表A、B、C,其中包含用户数据。它们中的每一个都有行版本类型的列版本。更新行时,数据库正在用较大的数字更新此记录

用户正在向我发送其数据的版本-一个数字:userVersion。作为响应,我需要从这三个表向他发送数据,其中version高于userVersion。我可以使用三个查询来实现这一点:

var listA = Entities.As.where(... && a.version > userVersion).toList();
// 1
var listB = Entities.Bs.where(... && b.version > userVersion).toList();
// 2
var listC = Entities.Cs.where(... && c.version > userVersion).toList();
然后我需要向用户发送当前版本:

userVersion = Max(listA.Select(a => a.version).Max(),
                  listB.Select(b => b.version).Max(),
                  listC.Select(c => c.version).Max());
问题是,当我得到listA数据库时,它可以用更新版本的As和Bs进行更新。所以当我得到listB时,listB的版本比listA的版本更新

最终用户将获得如此高的userVersion,以至于他永远不会在查询中更新元素

示例我只写版本专栏

A={1,3,6,8},B={2,5,9},C={4,7},userVersion=3。 listA={6,8}。 现在执行另一个线程的另一个查询,将元素10添加到A,11添加到B,因此B={2,5,9,11}。 listB={5,9,11}。 listC={4,7}。 userVersion=11,用户将永远不会获得A的元素10。
有没有办法准备这三个查询,每个列表一个查询,然后立即执行它们,这样就不会在这三个查询之间进行更新或插入?

我可以想到一个事务会阻止向As、Bs、Cs的写入。但这可能对性能非常不利。您是只需要最大值,还是还需要每个lis的内容?