Tsql 在T-SQL中结合使用多个结果集和联接

Tsql 在T-SQL中结合使用多个结果集和联接,tsql,join,multiple-resultsets,Tsql,Join,Multiple Resultsets,目前,我在存储过程中使用连接从不同的表输出元素。咄咄逼人的例子 select a.*, b.*, c.*, d.*, e.*, f.* from tableA a join tableB b on a.id = b.foreignid join tableC c on b.id = c.foreignid join tableD d on c.id = d.foreignid join tableE e on d.id = e.foreignid join tableF f on e.id =

目前,我在存储过程中使用连接从不同的表输出元素。咄咄逼人的例子

select a.*, b.*, c.*, d.*, e.*, f.* from tableA a
join tableB b on a.id = b.foreignid
join tableC c on b.id = c.foreignid
join tableD d on c.id = d.foreignid
join tableE e on d.id = e.foreignid
join tableF f on e.id = f.foreignid
where a.id = 1
在将输出映射到我的C代码中的实体时,使用它变得非常不方便,因为我必须维护很多样板代码。 相反,我将研究如何使用多个结果集,以便可以将每个结果集映射到代码中的对象类型。 但是,当我在我的案例中发现不同的结果都相互关联时,我将如何实现这一点呢?我能找到的例子都围绕着从不同的表中进行选择,这些表中的数据与我的外键无关。如果我将结果输出到多个结果集中,我唯一能想到的就是这样

select a.* from tableA
where a.id = 1

select b.* from tableB
join tableA a on a.id = b.foreignid
where a.id = 1

select c.* from tableC
join tableB b on b.id = c.foreignid
join tableA on a.id = b.foreginid
where a.id = 1

select d.* from tableD
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1

select e.* from tableE
join tableD d on d.id = e.foreignid
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1    

select f.* from tableF
join tableE e on e.id = f.foreignid
join tableD d on d.id = e.foreignid
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1    
但这并不干净,效率要低得多(我想,因为有更多的join语句)
是否可以以我尝试的方式使用多个结果集?我只是不知道如何在存储过程中编写sql语句,而不必像示例中那样对每个结果集进行大量连接。使用当前的解决方案,我得到了大量的列,因为我将它们连接在一起

实际上,您可以从单个SP返回多个结果集,并在c#中使用它们,请查看以下帖子,例如:

这是一个鲜为人知的功能,但听起来像是你想要的。您不必加入它们并将它们作为展平的行集返回,只需获取单独的行集并在内存中将它们拼接在一起即可

此外,您可能还想了解ORM框架,这可以节省您在功能上花费的大量打字,如果它适合您的需要。


关于GJ,我知道如何在代码中使用多个结果集,如果可以的话,我会使用ORM。但我们所有的数据库访问都必须使用存储过程。我确实使用LINQtoSQL来使用我的存储过程,但这并没有给我ORM的全部功能。我的问题是,当我确实需要加入我的数据时,在存储过程中是否可以返回多个结果集我不确定我是否理解,您是否需要多个结果集,SP中是否有多个selectt语句。如果您需要加入,请加入。或者,您想用一对多的方式将您创建的对象从结果集链接到一起,就像在数据库中使用外键一样?更多关于您想要实现的目标和遇到的问题的示例代码将在这里有所帮助。我添加了一个更好的示例,希望它更有意义。我看到了。。。您可以通过保留一个包含冗余信息的表来提高效率,每个键都将表e链接到表a。该表的pk将是E_id,然后将其他列D_id转换为A_id。在A_id上创建一个集群索引。然后,您可以通过对每个表而不是每个中间表进行连接,从每个表中提升相关节。这将需要一些内务管理来保持冗余信息的最新,但这应该是最快的解决方案。