2011-10-13 127 views
0

我继承了一个看起来需要我使用游标或while循环的系统。 鉴于以下表格,我想获得与会者的名称,例如在这种情况下避免SQL游标

比尔
鲍勃

吉尔

与会者
sourceTable会| SourceTableId
男孩| 1个
男孩| 2
女孩| 2
女孩| 1

男孩
ID |姓
1 |比尔
2 |鲍勃

女孩
ID |姓
1 |吉尔
2 |简

注意,系统没有实际使用与会者,男孩&女孩,而是使用合同,订单和其他这样的实体等,但它更容易,更容易代表这种形式。 有可能是负载更多的查找表,不仅仅是“男孩”和“女孩”所以

有没有办法,我可以通过不使用游标或其他基于行的操作来实现这一点。

回答

2

如果我没有理解这个查询应该工作:

SELECT FirstName 
    FROM Attendees 
    join Boys on id = SourceTableId 
WHERE SourceTable = 'Boys' 
union all 
SELECT FirstName 
    FROM Attendees 
    join Girls on id = SourceTableId 
WHERE SourceTable = 'Girls' 
+0

感谢您的评论,但问题空间更大,所以源表可能是男孩,女孩,猫,狗,鱼....所以工会需要数百个案例。对不起,应该更明确 –

+0

@丹黑色:它是每个基础表的联合部分,对吧?你对这种方法有什么担心 - 性能?实际上有多少个这样的表格,它们各自包含多少个记录? – Tao

+0

有794个可能的表,所以我担心代码的长度和静态性质 –

0

一名工会可能是你要做到这一点,可能封装在一个视图中的唯一方法。如果你可以得到表的列表,那么你可以编写一个代码生成器来生成视图。如果需要,如果供应商不允许将其放入应用程序数据库,则将该视图置于同一服务器上的不同数据库或模式中。

您可以编程方式识别您需要的表和列或从某处获取列表吗?

相关问题