在这种情况下避免使用 SQL 游标

发布于 2024-12-09 15:12:23 字数 479 浏览 0 评论 0原文

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

比尔
鲍勃

吉尔

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

男孩
ID|名字
1 |比尔
2 |鲍勃

女孩
ID|名字
1 |Jill
2 |Jane

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

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

I have inherited a system which seemingly requires me to use a cursor or while loop.
Given the below tables, I would like to get the names of the attendees e.g

Bill
Bob
Jane
Jill

Attendees
SourceTable|SourceTableId
Boys |1
Boys |2
Girls |2
Girls |1

Boys
Id|FirstName
1 |Bill
2 |Bob

Girls
Id|FirstName
1 |Jill
2 |Jane

Note, the system doesn't actually use Attendees,Boys & Girls but rather uses Contracts, Orders and other such entities etc but it was easier\simpler to represent in this form.
There may be loads more lookup tables than just "boy" and "girl" so

Is there anyway I can achieve this by not using cursors or other row based operations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赤濁 2024-12-16 15:12:23

如果我理解这个查询应该有效:

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'

If I understand this query should work:

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'
再可℃爱ぅ一点好了 2024-12-16 15:12:23

联合可能是执行此操作的唯一方法,可能封装在视图中。如果您可以获得表的列表,那么您可以编写一个生成视图的代码生成器。如果供应商不允许您将视图放入应用程序数据库中,则如有必要,请将视图放入同一服务器上的不同数据库或架构中。

您能否以编程方式识别所需的表和列或从某处获取列表?

A union is probably the only way you're going to do this, probably encapsulated in a view. If you can get a list of the tables then you could write a code generator that generates the view. If necessary put the view in a different database or schema on the same server if the vendor won't allow you to put it in the application DB.

Can you programatically identify the tables and columns you need or get a list from somewhere?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文