Начало » Использование СУБД » Microsoft SQL Server » Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы.  
	
		
		
			| Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы.  [сообщение #80] | 
			Wed, 22 June 2022 18:18  | 
		 
		
			
				
				
				
					
						  
						BlackEric
						 Сообщений: 393 Зарегистрирован: June 2022 
						
					 | 
					Senior Member  | 
					 | 
		 
		 
	 | 
 
	
		Иногда складывается такое ощущение, что народ ставит новые версии sql сервера просто не зная зачем, а разрабатывает софт как привык за 15 лет под MS SQL 2000. Новые возможности и типы данных, которые уже есть лет 7 вызывают недоумение. Если xml прижился, то использование CLR типов я не встречал. 
А началось все с того, что у нас на клиенте график в отчете показывал совсем не то, что ожидалось пользователями. 
 
Для выяснения кто же накосячил: мой импорт в бд или отчет в клиенте пришлось сделать упрощенную версию отчета построив график прямо в студии, чем несколько поразил админов заказчика. 
Как это сделать. 
 
Предположим, что нам нужно быстро визуализировать данные. Начиная с 2008, а лучше 2008R2 версии, сервер содержит встроенные CLR типы geometry и geography, которые позволяют визуализировать данные. 
Для примера пусть у нас есть таблица c полями x,  x*x. 
 
Заполним ее 
 
 
use testdb 
go 
 
create table data 
( 
id int primary key identity(1,1), 
val_x int, 
val_x2 int 
) 
Go 
 
declare @i int 
Set @i = -10 
 
while @i < 10 
begin 
  Insert Into data(val_x, val_x2) 
  Values(@i, @i + 1) 
 
  Set @i = @i + 1 
end 
Go 
 
Затем отобразим точки на графике 
 
use testdb 
go 
 
declare @graph table( 
        line geometry null 
) 
 
declare C cursor local fast_forward for 
    select 
        val_x, 
        val_x2 
    from data as i 
  
open C 
 
declare 
    @val_x int, 
    @val_x2 int, 
 
    @line geometry 
 
Select @val_x=val_x, @val_x2=val_x2 from data 
 
--Insert Geometry Values  
while 1=1 
begin 
    fetch next from C into @val_x, @val_x2 
    if @@fetch_status <> 0 break; 
 
    set @line = geometry::STPointFromText('POINT('+cast(@val_x as varchar(max))+' '+ cast(@val_x2 as varchar(max)) +')', 0) 
 
    insert into @graph([line]) 
    values(@line) 
end 
 
--Display data 
select * from @graph 
В результате получится набор точек по которому можно прикинуть изменение данных в таблице. При желании можно вместо точек вывести линии. 
Начиная с 2012 версии сервера можно использовать @line.BufferWithCurves(1) чтобы сделать точки или отрезки графика более жирными.
		
		
		
 |  
	| 
		
	 | 
 
 
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 15:54:34 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.00593 секунд 
 |