Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Новое в SQL Server 2005
Начать новую тему   Ответить на тему   вывод темы на печать

Новое в SQL Server 2005

Автор
Сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2006.05.22 19:43.30
Ответить с цитатой
Занимаюсь сейчас SQL Server 2005. Там появилась такая интересная возможность, как общие табличные выражения. По-видимому это из SQL-99. ОТВ немного похожи на представления, но они могут ссылать на себя, т.е. реализовать рекурсивный запрос произвольной глубины.
Некоторое время назад на форуме обсуждался вопрос хранения в одной таблице данных форума. Я тогда предложил таблицу приблизительно такого вида <id int, from_id int, text varchar(max)> (типы данных по sql server 2005). Здесь id – идентификатор записи, from_id – внешний ключ, text – сообщение форума. Для самого верхнего корневого уровня значение from_id = 0. Разумеется могут быть и другие столбцы. Таблица, т.о. ссылается на саму себя. На корневом уровне определяются темы или разделы форума. Каждая такая тема определяет одно дерево сообщений. При работе с деревьями могут возникнуть различные задачи. Скажем, типичной задачей является вывод всех сообщений, начиная с некоторого родительского сообщения (ветка дерева). Если глубина дерева неизвестна, то вывести сообщения обычными средствами достаточно сложно. Обычно идут по пути ограничения глубины.
С появлением общих табличных выражений эта проблема решается элементарно. Одним из важнейших преимущества ОТВ по отношению к другим объектам является возможность ссылки внутри ОТВ на самую себя. В результате реализуется рекурсивный запрос, который в частности и решает поставленную выше задачу.
declare @id int;
set @id=3;
--определяем ОТВ
with cte (id,from_id,text) as
(
select a.id,a.from_id,a.text
from table1 a –структура храниться в таблице table1
where id=@id
union all
select a.id,a.from_id,a.text
from table1 a
inner join
cte b –ссылка на саму себя
on b.id=a.from_id
)
select * from cte;
В запросе выводятся все сообщения, для которых сообщение с идентификатором @id является родительским.
Посмотреть профиль Отправить личное сообщение
XiroN
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 03.03.2006
Сообщения: 299
Откуда: Бобруйск

Статус: Offline
СообщениеДобавлено: 2006.05.23 06:36.21
Ответить с цитатой
Выложи SQl 2005 Cool Шоб поиграться Ржу
Посмотреть профиль Отправить личное сообщение ICQ Number
Упуату
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 23.05.2006
Сообщения: 3421


Статус: Offline
СообщениеДобавлено: 2006.05.23 06:54.09
Ответить с цитатой
vladislav
Возможность интересная. Но получается, что для построения дерева всё равно используется рекурсия?
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2006.05.23 07:15.24
Ответить с цитатой
Само дерево строиться просто путем ответа на какое-либо сообщение. Здесь нет никакой проблемы.
Посмотреть профиль Отправить личное сообщение
Упуату
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 23.05.2006
Сообщения: 3421


Статус: Offline
СообщениеДобавлено: 2006.05.23 07:16.22
Ответить с цитатой
Кроме рекурсии там, на сервере?
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2006.05.23 08:49.42
Ответить с цитатой
Да какя там рекурсия. Просто команда insert:

insert into table1
(from_id,text)
values (@id1,@mess)

@id1 - идентификатор сообщения, нак которое ты отвечаешь
@mess - само сообщение.
А как там на сервере строки вставляются - нас не волнует.
Посмотреть профиль Отправить личное сообщение
Упуату
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 23.05.2006
Сообщения: 3421


Статус: Offline
СообщениеДобавлено: 2006.05.23 09:47.34
Ответить с цитатой
Не согласен. Рекурсия при достаточно большой вложенности остается рекурсией.
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2006.05.25 22:55.13
Ответить с цитатой
XiroN

выкладывали уже.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
XiroN
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 03.03.2006
Сообщения: 299
Откуда: Бобруйск

Статус: Offline
СообщениеДобавлено: 2006.05.26 08:24.52
Ответить с цитатой
Leon писал(а):
XiroN

выкладывали уже.

Я не понял если выкладывали, ТО ГДЕ ОНО. И притом это было пол года назад. Или год вообще.
Посмотреть профиль Отправить личное сообщение ICQ Number
Смерть
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 283
Откуда: Shadrinsk.net

Статус: Offline
СообщениеДобавлено: 2006.05.26 14:05.01
Ответить с цитатой
XiroN писал(а):
Leon писал(а):
XiroN

выкладывали уже.

Я не понял если выкладывали, ТО ГДЕ ОНО. И притом это было пол года назад. Или год вообще.

а на этаж не спуститься и не взять да??
Посмотреть профиль Отправить личное сообщение ICQ Number
XiroN
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 03.03.2006
Сообщения: 299
Откуда: Бобруйск

Статус: Offline
СообщениеДобавлено: 2006.05.31 10:30.03
Ответить с цитатой
2Смерть: Ну тебя и плющит....
Посмотреть профиль Отправить личное сообщение ICQ Number
Смерть
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 283
Откуда: Shadrinsk.net

Статус: Offline
СообщениеДобавлено: 2006.05.31 20:32.35
Ответить с цитатой
XiroN писал(а):
2Смерть: Ну тебя и плющит....

хы.. а ты зади да и всё! Smile))) ВОТ ВСЕ ПРОБЛЕМЫ ТО... АШ ТЕ ТОГЛА ПРЕДЛАГАЛ А ТЫ НЕ Взял ВОт! Smile)
Убей себя !
Посмотреть профиль Отправить личное сообщение ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2006.06.01 15:22.12
Ответить с цитатой
Успокоились оба Evil
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Смерть
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 283
Откуда: Shadrinsk.net

Статус: Offline
СообщениеДобавлено: 2006.06.03 11:06.10
Ответить с цитатой
andy ice писал(а):
Успокоились оба Evil

Окей босс!!! Cool
Посмотреть профиль Отправить личное сообщение ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Новое в SQL Server 2005

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы