Рисуем в SQL Server Management Studio

Источник: gotdotnet

В стародавние времена вообще не было графических интерфейсов. И мониторов тоже не было, но это было уже совсем давно. И уж тем более - никакой графики не было у утилит, взаимодествовавших с базой данных. Хотя сегодня пользователям продуктов Microsoft наверное страшно представить, что по сей день существуют подобные продукты.

Например, для подключения модема skylink к ноутбуку одной очень известной и "понтовой" фирмы, пользователю придется чего-то набирать в командной строке одноименной операционной системы, которая почему-то считается самой продвинутой с точки зрения пользовательского интерфейса!

А разработчики, использующие СУБД не менее "понтовой" фирмы, пока не установят "дополнительных" утилит, пишут запросы в строго текстовом интерфейсе без подсветки синтаксиса.

Microsoft же идет по пути "будь поближе к народу" и в каждой новой версии SQL Server радует небольшими усовершенствованиями в области представления информации в прилагаемых к самому серверу утилитах.
Уже в SQL 2000 (да и раньше в общем-то тоже) были нормальный редактор запросов и табличное отображение их результатов.
Также красиво отображались планы запросов - в виде интуитивно понятных пиктограмм и "стрелочек".

В 2005 в SQL Srerv Management Studio (SSMS) добавилась возможность при получении в выборке xml данных, открывать xml-документы одним щечком мыши.

В 2008 разработчики добавили помимо всего прочего не только пространственные типы данных, но и их отображение прямо в SSMS.
О чем в том числе рассказал Никита Шамгунов (один из разработчиков SQL Server) на Платформе 2009:
http://platforma2009.ru/materials/showitem.aspx?MID=25e0f71e-9bb1-41b7-b03c-3897e69f42ea

Но казалось бы, зачем разработчику или администратору такая "красота", если он работает на фабрике или в банке?
Ведь ничего "графического" в базах таких предприятий, как правило, не хранится...

Но есть такая вещь, как диаграмма Ганта. Она, например, используется для отображения разного рода расписаний. Попробуем нарисовать такую диаграмму прямо в SSMS, одним запросом.

Для начала - создадим функцию, которая преобразует временной диапазон в соответствующий прямоугольник на плоскости:
(помимо дат начала и конца диапазона, в функцию передается некий номер, который будет устанавливает расположение этого прямоугольника по "вертикали")

create function OrderToPolygon(@NUM int, @StartDate datetime, @EndDate datetime)

returns geometry

as

begin

      return(geometry::STGeomFromText('POLYGON ((

      '+CONVERT(varchar(10), datediff(dd, '2009-01-01', @StartDate))+' '+CONVERT(varchar(10), @NUM)+',

      '+CONVERT(varchar(10), datediff(dd, '2009-01-01', @StartDate))+' '+CONVERT(varchar(10), @NUM+1)+',

      '+CONVERT(varchar(10), 1+datediff(dd, '2009-01-01', @EndDate))+' '+CONVERT(varchar(10), @NUM+1)+',

      '+CONVERT(varchar(10), 1+datediff(dd, '2009-01-01', @EndDate))+' '+CONVERT(varchar(10), @NUM)+',

      '+CONVERT(varchar(10), datediff(dd, '2009-01-01', @StartDate))+' '+CONVERT(varchar(10), @NUM)+'))', 0))

end

Теперь создадим и заполним таблицу "заказов" со сроками их изготовления:
create table #orders (
      OrderNum varchar(10),
      StartDate datetime,
      EndDate datetime
      )
insert into #orders
select '1234' , '2009-01-01', '2009-01-03' union all select '1235' , '2009-01-03', '2009-01-06'
union all
select '1236' , '2009-01-05', '2009-01-08' union all select '1237' , '2009-01-07', '2009-01-08'
union all
select '1238' , '2009-01-09', '2009-01-11' union all select '2231' , '2009-01-02', '2009-01-03'
union all
select '2235' , '2009-01-04', '2009-01-05' union all select '2238' , '2009-01-06', '2009-01-08'
union all
select '2239' , '2009-01-08', '2009-01-09' union all select '2240' , '2009-01-10', '2009-01-12'

Сделав выборку из этой таблицы
select OrderNum, dbo.OrderToPolygon(ROW_NUMBER() over(order by OrderNum desc), StartDate, EndDate)
from #orders

обнаруживаем невиданную ранее закладку Spatial results

Можно включить в качестве имен объектов на плоскости номера заказов:

Только не спрашивайте, как задавать цвет геометрическим фигурам, хорошо? ;)
Все-таки это база данных, а не графический редактор.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23401