Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли вобрать в varchar разные по типу select'ы?  [new]
MonikBravo
Guest
тысячу извинений, что отвлекаю в рабочий час!

Это вопрос для расширения кругозора. К примеру есть таблицы (Фирмы, Сотрудники фирмы, Отрасли фирмы)
Фирмы - id, title
1, Рога и копыта

Сотрудники фирмы - id, firm_id, title
1, 1, Иванов
2, 1, Петров

Отрасли фирмы - id, firm_id, title
1, 1, Рогатостроение
2, 1, Копытоводство

Клиенту из БД надо запросить какбы карточку фирмы, и для этого надо сделать 3 селекта от пользователя до удалённой БД
SELECT title FROM Фирмы;
SELECT title FROM Сотрудники фирмы WHERE firm_id=1;
SELECT title FROM Фирмы WHERE firm_id=1;


А можно ли выполнить на сервере эти 3 запроса, а вернуть всю информацию просто в одном поле, например varchar(max)?
Т.е. чтобы клиент получил только одну запись, например, в таком виде WHERE Фирмы.id=1:
-----------------------------------;
Рога и Копыта
-----------------------------------;
Иванов
Петров
-----------------------------------;
Рогатостроение
Копытоводство
-----------------------------------;

Таким механизмом вообще в мире пользуются или нет? Какая ваша цель? Цель снизить количество обращений от клиента к серверу.
А так как данные клиенту нужны только для отображения информации, то их на клиенте даже форматировать не нужно. Просто показал текстбокс и всё.
8 сен 15, 11:02    [18121964]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
MonikBravo,

Может это поможет?
http://stackoverflow.com/questions/23513394/how-to-merge-rows-into-single-column-using-for-xml-path-in-sql
8 сен 15, 11:07    [18121992]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
MonikBravo,

данные по "как бы карточке фирмы" может вернуть запрос с сервера, оформленный, например как хранимая процедура или UDF и сколько там будет использовано таблиц, соединений и прочего клиенту не важно, важен один вызов - и данные в кармане. Если, конечно, речь идет об этом.
8 сен 15, 11:59    [18122298]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
MonikBravo
Guest
AnyKey45,

сенкс, ну там как бы собираются данные в строку.
Т.е. надо делать через FOR XML PATH, нет необходимости задействовать 3 SELECT'a?
8 сен 15, 12:00    [18122301]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
Glory
Member

Откуда:
Сообщений: 104760
MonikBravo
Клиенту из БД надо запросить какбы карточку фирмы, и для этого надо сделать 3 селекта от пользователя до удалённой БД
SELECT title FROM Фирмы;
SELECT title FROM Сотрудники фирмы WHERE firm_id=1;
SELECT title FROM Фирмы WHERE firm_id=1;

А зачем клиенту 2 запроса к таблицы "Фирмы" ?
Он не может написать один запрос, в котором сразу использовать и "Фирмы" и "Сотрудники фирмы " и фильтр по firm_id ?
8 сен 15, 12:04    [18122329]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
MonikBravo
Guest
PaulYoung
MonikBravo,

данные по "как бы карточке фирмы" может вернуть запрос с сервера, оформленный, например как хранимая процедура или UDF и сколько там будет использовано таблиц, соединений и прочего клиенту не важно, важен один вызов - и данные в кармане. Если, конечно, речь идет об этом.

Да, совершенно верно.
Хранимка делает у себя хоть 10 запросов, но возвращает последовательный фрагмент текста собранного из разных запросов.


Glory
А зачем клиенту 2 запроса к таблицы "Фирмы" ?
Он не может написать один запрос, в котором сразу использовать и "Фирмы" и "Сотрудники фирмы " и фильтр по firm_id ?

вот заметили же :). Опечатался, сори, скопипастил первую строчку просто неудачно. Естественно, надо так:
SELECT title FROM Фирмы;
SELECT title FROM Сотрудники фирмы WHERE firm_id=1;
SELECT title FROM Отрасли фирмы WHERE firm_id=1;
8 сен 15, 12:13    [18122381]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
MonikBravo
Guest
Glory
Он не может написать один запрос, в котором сразу использовать и "Фирмы" и "Сотрудники фирмы " и фильтр по firm_id ?

Может, но это же увеличит передаваемые данные.
Будет же в таком виде насколько я понимаю, и потом это надо будет на клиенте разбирать:
Рога и копыта, Иванов, Рогатостроение
Рога и копыта, Петров, Рогатостроение
Рога и копыта, Иванов, Копытоводство
Рога и копыта, Петров, Копытоводство
8 сен 15, 14:44    [18123289]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
ТС,

засунь всё в переменную varchar(max)

declare @s varchar(max) = '';
declare @crlf varchar(max) = CHAR(10)+CHAR(13);

SET @s = REPLICATE('-',50)+@crlf;
SELECT @s = @s + title + @crlf FROM Фирмы;
SET @s = @s + REPLICATE('-',50)+@crlf;
SELECT @s = @s + title + @crlf FROM Сотрудники фирмы WHERE firm_id=1;
SET @s = @s + REPLICATE('-',50)+@crlf;
SELECT @s = @s + title + @crlf FROM Отрасли фирмы WHERE firm_id=1;
SET @s = @s + REPLICATE('-',50)+@crlf;

select @s as [Результат];
8 сен 15, 14:45    [18123306]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
Glory
Member

Откуда:
Сообщений: 104760
MonikBravo
Будет же в таком виде насколько я понимаю, и потом это надо будет на клиенте разбирать:

А вот это уже зависит от того, как запрос написать
8 сен 15, 14:45    [18123307]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
MonikBravo
Guest
Konst_One
ТС,
засунь всё в переменную varchar(max)


Вот, да, похоже, что именно то, что я искал.... Сейчас протестируем! Отлично, спасибо.
8 сен 15, 15:56    [18123864]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
MonikBravo
Клиенту из БД надо запросить какбы карточку фирмы, и для этого надо сделать 3 селекта от пользователя до удалённой БД
.

select карточка  from view_карточка_фирмы
where 
firm_id=1;
8 сен 15, 15:59    [18123884]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
XML ,
Guest
ТС изобретает XML ? :)
8 сен 15, 21:03    [18125243]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
Glory
Member

Откуда:
Сообщений: 104760
MonikBravo
Вот, да, похоже, что именно то, что я искал.... Сейчас протестируем!

А через некоторое время раздадутся стоны, а почему сначала у меня все работало, а потом вдруг перестало работать. Этот вариант недокументирован и может давать разные результаты
9 сен 15, 08:01    [18126115]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли вобрать в varchar разные по типу select'ы?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Glory
А через некоторое время раздадутся стоны, а почему сначала у меня все работало, а потом вдруг перестало работать. Этот вариант недокументирован и может давать разные результаты

Думаю, раньше раздадутся вопли "убью [censored]!!111" от разработчиков, которым достанется в наследство это хозяйство поддерживать и развивать.
9 сен 15, 08:53    [18126195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить