2016-09-27 53 views
1

我对T-SQL,存储过程和Microsoft SQL Server Management Studio相当陌生。T-SQL - 从视图中的数据创建图形

我在我的数据库中创建了一个名为BodyBasics的视图。在这个视图中,有一个名为BackAngle的列。在BackAngle栏中,我列出了用户背部弯曲的角度。数据类型为float,并且可以从90到180

在此查看列中找到一些示例值的范围是:

173,10786534157, 147,423570266, 170,196359990068, 148,774131860277, 153,439316876929, 147,063469480619, 173,861485242977, 172,1319088368, 145,416983331938, 163,02645970309, 147,65814822779, 146,212510299859, 173,769456580658 

观是这样的:

| ID | Timestamp | RecordingId | BodyNumber | BackAngle | 

我想要按时间顺序从视图中选择BackAngle数据,并将数据绘制成图形。

我曾尝试查询:

GO 
DECLARE @BackAngle TABLE(Backangle FLOAT); 

INSERT @BackAngle(Backangle) SELECT dbo.ViewBodies.BackAngle FROM dbo.ViewBodies 
WHERE dbo.ViewBodies.BackAngle IS NOT NULL 
ORDER BY Timestamp; 
SELECT geometry::STGeomFromText('LINESTRING(' + @BackAngle(Backangle) + ')'); 
GO 

,我从这段代码中得到的错误是:

Msg 102, Level 15, State 1, Line 7 
Incorrect syntax near 'Backangle'. 
Msg 102, Level 15, State 1, Line 9 
Incorrect syntax near '('. 

我得到了几何:: STGeomFromText语法从这篇文章: http://sqlmag.com/t-sql/generating-charts-and-drawings-sql-server-management-studio

有人能指出我的代码出了什么问题,以及这是否是正确的方法?有其他选择吗?

+0

请给出您在“BackAngle”中存在的值的一些示例。无需首先填写声明的表格。你可以直接调用函数* ... – Shnugo

+0

一些例子:173,10786534157,147,423570266,170,196359990068,148,774131860277,153,439316876929,147,063469480619,173,861485242977,172,1319088368,145, 416983331938,163,02645970309,147,65814822779 146,212510299859,173,769456580658 – Gogoku7

回答

1

您不需要临时表,您应该在LINESTRING中为变量使用TEXT STRING。作为刻度线,您可以使用行号(1,2,3,4,...)

DECLARE @WKT AS VARCHAR(8000); 
SET @WKT = 
       STUFF(
        (SELECT ',' 
          + CAST(ROW_NUMBER() 
            OVER (ORDER BY [timestamp]) AS VARCHAR(100)) 
          + ' ' + CAST(BackAngle AS VARCHAR(30)) 
        FROM ViewBodies 
        WHERE BackAngle IS NOT NULL 
        ORDER BY [timestamp] 
        FOR XML PATH('')), 1, 1, ''); 

SELECT geometry::STGeomFromText('LINESTRING(' + @WKT + ')', 0); 
+0

它的工作,谢谢。 – Gogoku7