Объединение двух или более таблиц, когда вы не знаете количество таблиц, которые вы объединяете - PullRequest
1 голос
/ 31 марта 2009

Я работаю с MS SQL 2005. Я определил древовидную структуру как:

1 
|\ 
2 3 
  /|\ 
 4 5 6 

Я создал SQL-функцию Subs (id), которая получает id и возвращает таблицу поддеревьев. Итак, Subs (3) вернет 4 строки с 3,4,5,6, а Subs (2) вернет одну строку с 2.

У меня есть оператор select, который возвращает вышеуказанные идентификаторы (объединяя это дерево с другими таблицами)

Я хочу после оператора select, который возвращает вышеуказанные идентификаторы
(что приведет к таблице, например, с 2 строками:)

2
3

чтобы иметь возможность запускать вспомогательную функцию как

Subs(2) 
union 
Subs(3).

(Результатом должны быть строки с идентификатором 2,3,4,5,6)

Проблема в том, что я не знаю, как передавать аргументы, и я не знаю, как динамически использовать объединение.

Можно ли решить эту проблему на этом уровне, или я должен поднять это на верхний уровень (C #)?

Ответы [ 2 ]

1 голос
/ 31 марта 2009

Я не думаю, что вам нужен UNION здесь, с SQL Server 2005 вы можете достичь желаемого результата, используя CROSS APPLY:

select 
    f.* 
from 
    resultsTable rt
    cross apply dbo.subs(rt.ID) f

Предполагается, что в resultTable хранятся результаты вашего первого запроса, а имя поля - ID

0 голосов
/ 31 марта 2009

Я думаю, что вы хотите прочитать о Рекурсивных общих табличных выражениях .

...