Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

2000 ;собрать строку из записей в таблице [MSSQL]


KAA ©   (2002-03-01 13:12:00) 

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


Delirium   (2002-03-01 17:32:00) [1]

У меня-же linked сам к себе - мгновенно работает


wicked   (2002-03-01 17:19:00) [2]

2 Delirium ©
а скорость не падает при выборке через linked server?.... а то я с оракла так данные забираю, так подтормаживает....


Delirium   (2002-03-01 16:50:00) [3]


select @a=caption from list_job for xml auto

Так не получится. Во первых BLOB-данные не могут храниться в переменных, а во вторых - вообще сохранить XML в таблицу можно только так, как я показал выше (если кто знает другой способ - буду рад). Связаные сервера это сервера к которым можно обратиться таким образом:

select * from server.base.user.table

создаются процедурой sp_addlinkedserver или в
EnterPrise Manager->Security->Linked Servers
ну а что делть дальше - читай help :)


KAA   (2002-03-01 16:34:00) [4]

можно подробней о linked server , я с этим не работал.

эта конструкця работает
select caption from list_job for xml auto

хотелось бы сделать
select @a=caption from list_job for xml auto


Delirium   (2002-03-01 16:08:00) [5]


> KAA © (01.03.02 15:59)
> А чтоб результать выборки присвоить переменной?
> Говорит The FOR XML clause is not allowed in a ASSIGNMENT
> statement.

Вот тебе подход, как я делаю:

select * into #Temp
from OpenQuery(local,"select * from test for xml auto, xmldata")

здесь local - linked server сам к себе.
Пока ничего лучше придумать не смог :(


Delirium   (2002-03-01 16:04:00) [6]


> Reindeer Moss Eater (01.03.02 15:53)
> Алергия на циклы?
> Тогда объедини таблицу с ней самой столько раз, сколько
> в ней строк. Получишь в результирующем запросе одну строку
> со всеми значениями поля.

Вопрос не праздный и не из-за аллегии на циклы, я бьюсь над похожей проблемой уже довольно давно. Вот тебе задача: есть таблица с BLOB полями, в ячейки BLOB полей необходимо помещать структуру и данные различных таблиц (в общем случае совершенно различных) для последующей репликации основной таблицы. Пока что оперирую XML средствами MSSQL-я, ничего лучше не придумал. А циклы и курсоры - весьма и весьма медленно, особенно, если моя задача работает большей частью в триггерах.


KAA   (2002-03-01 15:59:00) [7]

А чтоб результать выборки присвоить переменной?
Говорит The FOR XML clause is not allowed in a ASSIGNMENT statement.


Reindeer Moss Eater   (2002-03-01 15:53:00) [8]

Алергия на циклы?
Тогда объедини таблицу с ней самой столько раз, сколько в ней строк. Получишь в результирующем запросе одну строку со всеми значениями поля.


Delirium   (2002-03-01 15:48:00) [9]

Нет, это формат XML - собственно, универсальная древовидная структура состоящая из тегов. Её, при желании, можно обработать соответствующим образом как обычный текст.


KAA   (2002-03-01 15:33:00) [10]

>Delirium © (01.03.02 15:11)

Это то что надо. А есть более приличный вид, чтоб были только значения полей?


Delirium   (2002-03-01 15:11:00) [11]


> KAA © (01.03.02 14:16)
> for xml auto
> что это?

Попробуй - узнаешь!


Delirium   (2002-03-01 15:10:00) [12]

А While - это по вашему не цикл ?!!!


TSV   (2002-03-01 14:48:00) [13]

Это то, что я имел в виду. :-)


Reindeer Moss Eater   (2002-03-01 14:33:00) [14]

В T-SQL очень даже просто
Declare MyCur CURSOR For Select MyField From MyTable
Open MyCur
While @@FetchStatus = 0
и так далее ...


KAA   (2002-03-01 14:16:00) [15]

for xml auto
что это?

пробегать в цикле - это слишком зверская операция.
Неужели в MSSQL нет способа сделать нечто подобное средствами SQL.


Delirium   (2002-03-01 13:45:00) [16]

Всё что я могу себе представить, это что-то связаное с

select col1 from Table1 for xml auto


TSV   (2002-03-01 13:41:00) [17]

А как ты себе это иначе представляешь?
Напиши хранимую процедуру и вызывай ее с клиента.


Наверх

Титульная страница Поиск, карта сайта Написать письмо