在这种情况下避免SQL游标

时间:2011-10-13 10:59:25

标签: database tsql sql-server-2005 database-cursor

我继承了一个似乎要求我使用游标或while循环的系统。 鉴于下表,我想得到与会者的姓名,例如

  

比尔
鲍勃

吉尔

     

与会者
  SourceTable | SourceTableId
男孩| 1
男孩| 2
女孩| 2
女孩| 1

     

男孩
  Id | FirstName
1 | Bill
2 | Bob

     

女孩
  Id | FirstName
1 | Jill
2 | Jane

注意,系统实际上并没有使用参加者,男孩和女孩。女孩,而是使用合同,订单和其他此类实体等,但它更容易\更简单,以这种形式表示。 可能会加载更多的查找表而不仅仅是“男孩”和“女孩”所以

无论如何,我可以通过不使用游标或其他基于行的操作来实现此目的。

2 个答案:

答案 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)

联盟可能是你要做的唯一方法,可能是封装在一个视图中。如果您可以获得表的列表,那么您可以编写生成视图的代码生成器。如果供应商不允许您将视图放在应用程序数据库中,则必要时将视图放在同一服务器上的不同数据库或模式中。

您能以编程方式识别所需的表格和列,还是从某个地方获取列表?