Asp.net SQL Server将多个查询作为一个查询运行

Asp.net SQL Server将多个查询作为一个查询运行,asp.net,sql,sql-server,Asp.net,Sql,Sql Server,我需要同时运行两个不同的SQL查询。但由于我在这两个函数中都使用了内部联接,所以我不能只联接它们。有办法做到这一点吗?另外,您认为过多的规范化会导致问题吗 SELECT S.SchoolName,Sd.DepartmentName,E.GraduationDate FROM Education E INNER JOIN SchoolDepartment Sd ON Sd.DepartmentID = E.DepartmentID JOIN S

我需要同时运行两个不同的SQL查询。但由于我在这两个函数中都使用了内部联接,所以我不能只联接它们。有办法做到这一点吗?另外,您认为过多的规范化会导致问题吗

SELECT S.SchoolName,Sd.DepartmentName,E.GraduationDate 
FROM   Education E 
           INNER JOIN SchoolDepartment Sd ON Sd.DepartmentID = E.DepartmentID 
           JOIN School S ON S.SchoolID = Sd.SchoolID

SELECT c.CompanyName,dt.DepartmentName, pl.PositionLevelName 
FROM   Employee Ee 
           INNER JOIN Position P ON Ee.PositionID = P.PositionID  
           JOIN Company c ON c.CompanyID = P.CompanyID 
           JOIN Department De ON De.DepartmentID=P.DepartmentID 
           JOIN DepartmentType dt ON dt.DepartmentName = De.DepartmentTypeID  
           JOIN PositionLevel pl ON pl.PositionLevelID=P.PositionLevelID    

如果字段具有相同的数据类型(查询1中的列与查询2中的相同数据类型相匹配),则可以使用
UNION
组合两个查询,否则,如果无法将它们合并,则不可能

如果字段的数据类型相同(查询1中的列与查询2中的数据类型相同),则可以使用
UNION
组合这两个查询,否则,如果无法将它们合并,则不可能

似乎您正在尝试获取两组不同的数据,因此运行两个查询并不是世界上最糟糕的事情


根据您的评论:我肯定Facebook在加载您的个人资料页面时会查询多个商店,但他们大量使用数据缓存,因此他们可能会缓存您的个人资料对象以减少数据库点击量。

看起来您正试图获取两组不同的数据,因此运行两个查询并不是世界上最糟糕的事情


根据您的评论:我肯定Facebook在加载您的个人资料页面时会查询多个商店,但它们大量使用数据缓存,因此可能会缓存您的个人资料对象减少数据库点击。

您没有指出它们是如何连接到配置文件的,以及每组是否有许多互不相关的行。如果每一行只返回一行,并且两行都与概要文件相关(在关系数据库的意义上相关-属性与键“相关”-可能是您的概要文件),那么可能有一种现实的方法可以将它们组合到单个结果集(即关系或表)

如果在这个意义上,集合不是真正相关的,那么可以使用一些策略

  • 在同一个命令中创建一个存储过程或批处理,该命令按顺序返回两个结果集,并使用ADO.NET的功能在读取器上获取下一个结果集

  • 对数据库进行两次连续调用

  • 使用ASP和ADO的异步功能同时对数据库进行两次调用并处理完成操作-这对于大容量站点非常有用,因为一旦完成,控制权将返回到页面,从而释放线程


  • 您还没有指出它们是如何连接到配置文件的,以及每个集合是否将有许多互不相关的行。如果每一行只返回一行,并且两行都与概要文件相关(在关系数据库的意义上相关-属性与键“相关”-可能是您的概要文件),那么可能有一种现实的方法可以将它们组合到单个结果集(即关系或表)

    如果在这个意义上,集合不是真正相关的,那么可以使用一些策略

  • 在同一个命令中创建一个存储过程或批处理,该命令按顺序返回两个结果集,并使用ADO.NET的功能在读取器上获取下一个结果集

  • 对数据库进行两次连续调用

  • 使用ASP和ADO的异步功能同时对数据库进行两次调用并处理完成操作-这对于大容量站点非常有用,因为一旦完成,控制权将返回到页面,从而释放线程


  • 不,在一个连接上不可能。您需要打开两个连接,并且有一个足够强大的服务器来处理这个问题(这意味着您可能有多个核心)

    请注意,我回答了你的问题——大多数人似乎没有回答

    我需要同时运行两个不同的SQL查询

    这不是它在SQ LServer中的工作方式。如果将thm写入一个批处理中,它们仍然会一个接一个地执行,而不是同时执行。不确定它们同时运行是否有意义,但这正是你所要求的


    但是我有一个软件同时执行数百个SQL,它有一个足够强大的应用服务器(24个内核),一个足够强大的Oracle RAC(两台机器上有48个内核,超线程=96个并行线程)。

    不,一个连接不可能。您需要打开两个连接,并且有一个足够强大的服务器来处理这个问题(这意味着您可能有多个核心)

    请注意,我回答了你的问题——大多数人似乎没有回答

    我需要同时运行两个不同的SQL查询

    这不是它在SQ LServer中的工作方式。如果将thm写入一个批处理中,它们仍然会一个接一个地执行,而不是同时执行。不确定它们同时运行是否有意义,但这正是你所要求的


    但是我有一个软件同时运行数百个SQL,它有一个足够强大的应用服务器(24个内核),一个足够强大的Oracle RAC(两台机器上48个内核,超线程=96个并行线程)。

    我正在尝试做类似的事情。实际上,我正在尝试根据多个不同的条件将行分组到一个数据集中。我所做的是将所有数据查询到一个临时表中,然后将该临时表中的数据查询到不同的视图中,然后将其合并回来。这样它显示了不同的视图。例如1号线包括cat1、cat2和cat3。第2行只是第2类和第3类。3号线为Cat1-cat8。数据都是一样的,只是数据的不同部分。因此,多次访问数据库以查询它是不值得的开销。我可以多次查询temp以获取切片,然后将它们合并到一个视图中。或者,如果您需要这些视图,并且它们发生了变化,您可以创建一个表,其中包含您想要的一对多的分组。使用这种三层方法,您可以一步加入并获得总和。

    我正在尝试做类似的事情。我实际上是在尝试用多个c来分组行