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

时间:2012-02-23 21:35:53

标签: 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 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    

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您尚未指明它们如何连接到配置文件以及每个集合是否会有许多彼此无关的行。如果每个只返回一行,并且两者都与配置文件相关(在关系数据库的意义上相关 - 属性与键相关 - 也许是您的配置文件),那么可能有一种现实的方法将它们组合成一个结果集合(即关系或表格)。

如果这些设置在这个意义上并不真正相关,可以使用一些策略。

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

  2. 对数据库进行两次连续调用。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

请注意,我回答你的问题 - 其他大多数人似乎都没有。

  

我有两个不同的SQL查询,我需要一次运行

这不是它在SQ LServer中的工作原理。如果你把它写成一个批次,它们仍然一个接一个地执行,而不是同时执行。不确定它们是否同时运行是有意义的,但这就是你要求的。

但我有软件可以同时执行数百个SQL,因为它有足够强大的applkication服务器(24个核心),足够强大的Oracle RAC(2台机器上有48个内核,超线程= 96个并行线程)。

答案 4 :(得分:0)

我正在尝试做类似的事情。我实际上是尝试按不同的标准将行分组到一个数据集中。我正在做的是将所有数据查询到临时表中,然后将临时表查询到不同的视图中,然后将其合并回来。这样它就显示了不同的视图。例如。第1行包括cat1 cat2和cat3。第2行只是cat 2和cat 3.而第3行是Cat1 - cat8。数据完全相同,只是它的不同部分。因此,多次访问数据库以查询它是不值得的开销。我可以多次查询temp以获取我的切片然后将它们合并到一个视图中。或者,如果您需要这些视图并进行更改,则可以创建一个包含所需分组的表格。通过这三种方法,您可以加入并一步获得总和。