Избегайте SQL Cursor в этом сценарии - PullRequest
0 голосов
/ 13 октября 2011

Я унаследовал систему, которая, по-видимому, требует от меня использования курсора или цикла while. Учитывая таблицы ниже, я хотел бы получить имена участников, например,

Bill
Bob
Jane
Jill

Участники
SourceTable | SourceTableId
Мальчики | 1
Мальчики | 2
Девушки | 2
Девушки | 1

Мальчики
Id | FirstName
1 | Bill
2 | Bob

Девушки
Id | FirstName
1 | Jill
2 | Jane

Обратите внимание, что система на самом деле не использует участников, мальчиков и девочек, а скорее использует контракты, заказы и другие подобные объекты и т. Д., Но это было легче \ проще представить в этой форме. Может быть загружено больше таблиц поиска, чем просто "мальчик" и "девочка", так что

Могу ли я в любом случае добиться этого, не используя курсоры или другие операции со строками?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Если я понимаю, этот запрос должен работать:

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 голосов
/ 13 октября 2011

Объединение - это, вероятно, единственный способ сделать это, возможно, заключенный в представление. Если вы можете получить список таблиц, то вы можете написать генератор кода, который генерирует представление. Если необходимо, поместите представление в другую базу данных или схему на том же сервере, если поставщик не разрешит вам поместить его в базу данных приложения.

Можете ли вы программно определить нужные таблицы и столбцы или получить список откуда-нибудь?

...