我继承了一个似乎要求我使用游标或while循环的系统。 鉴于下表,我想得到与会者的姓名,例如
比尔
鲍勃
简
吉尔与会者
SourceTable | SourceTableId
男孩| 1
男孩| 2
女孩| 2
女孩| 1男孩
Id | FirstName
1 | Bill
2 | Bob女孩
Id | FirstName
1 | Jill
2 | Jane
注意,系统实际上并没有使用参加者,男孩和女孩。女孩,而是使用合同,订单和其他此类实体等,但它更容易\更简单,以这种形式表示。 可能会加载更多的查找表而不仅仅是“男孩”和“女孩”所以
无论如何,我可以通过不使用游标或其他基于行的操作来实现此目的。
答案 0 :(得分: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'
答案 1 :(得分:0)
联盟可能是你要做的唯一方法,可能是封装在一个视图中。如果您可以获得表的列表,那么您可以编写生成视图的代码生成器。如果供应商不允许您将视图放在应用程序数据库中,则必要时将视图放在同一服务器上的不同数据库或模式中。
您能以编程方式识别所需的表格和列,还是从某个地方获取列表?