Использование нескольких наборов результатов в сочетании с объединениями в T-SQL - PullRequest
0 голосов
/ 28 июня 2011

В настоящее время я использую соединения внутри моих хранимых процедур для вывода элементов из разных таблиц. Агрессивный пример

select a.*, b.*, c.*, d.*, e.*, f.* from tableA a
join tableB b on a.id = b.foreignid
join tableC c on b.id = c.foreignid
join tableD d on c.id = d.foreignid
join tableE e on d.id = e.foreignid
join tableF f on e.id = f.foreignid
where a.id = 1

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

select a.* from tableA
where a.id = 1

select b.* from tableB
join tableA a on a.id = b.foreignid
where a.id = 1

select c.* from tableC
join tableB b on b.id = c.foreignid
join tableA on a.id = b.foreginid
where a.id = 1

select d.* from tableD
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1

select e.* from tableE
join tableD d on d.id = e.foreignid
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1    

select f.* from tableF
join tableE e on e.id = f.foreignid
join tableD d on d.id = e.foreignid
join tableC c on c.id = d.foreignid
join tableB b on b.id = c.foreignid
join tableA a on a.id = b.foreignid
where a.id = 1    

Но это не чище, намного неэффективно (я бы предположил, так как есть гораздо больше операторов объединения) Можно ли использовать несколько наборов результатов таким образом, я пытаюсь? Я просто не знаю, как написать SQL-операторы в хранимых процессах без необходимости выполнять массовые объединения для набора результатов, как в примере. И с текущим решением я получаю взрыв колонн, так как я соединяю их всех вместе

1 Ответ

0 голосов
/ 28 июня 2011

На самом деле вы можете возвращать множественные наборы результатов из одного SP и использовать их в c #, проверьте этот пост, например: http://blogs.msdn.com/b/dditweb/archive/2008/05/06/linq-to-sql-and-multiple-result-sets-in-stored-procedures.aspx

Это менее известная функция, но звучит так, как вы просили.Вам не нужно присоединяться к ним и возвращать их как единый набор строк, просто получите отдельные наборы строк и соберите их вместе в памяти.

Также вы можете прочитать об ORM-фреймворках, которые могут сэкономить вам много времени на печатание, которое вы можете потратить на функции, если они соответствуют вашим потребностям.https://stackoverflow.com/questions/249550/what-orm-frameworks-for-net-do-you-like-best

С уважением GJ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...