我正在尝试在MSSMS中创建一个存储过程,在执行时会将execute语句中给出的数据插入到以前创建的表中。
这就是我现在所拥有的;
Create Procedure UDP_INSERT_TABLES3
@shape_type varchar(30)
,@wktdata varchar(max)
,@label varchar(40)
AS
Begin
set nocount on;
if @shape_type = 'Point'
insert into Points (Point, Label)
values (@wktdata, @label)
END
但是如果我尝试用像<; p>这样的语句来执行它
exec UDP_INSERT_TABLES3 'Point', '(179.59 -40.35)', 'My House'
我得到&#34;将数据类型varchar转换为地理位置时出错。&#34;
据我了解,&#34; STPointFromText&#34;用于将varchar转换为Geography,但我看到的每个例子都有坐标&#39;硬编码&#39;可以这么说。
例如;
DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();
我需要做些什么来转换我执行语句中给出的坐标?我考虑过使用CAST,但我不确定如何在一组括号中投射纬度和经度而不是单独投射它们。
非常感谢任何帮助。
答案 0 :(得分:1)
如果您没有使用看起来像WKT的东西而已婚,但我是否可以推荐Point()
静态方法?它需要三个参数(纬度,经度和SRID)并返回地理或几何点对象。像这样:
declare @lat float = 50, @long float = 50;
select geography::Point(@lat, @long, 4326);
答案 1 :(得分:0)
你几乎就在那里,你必须记住你必须将输入转换为地理领域。试试这个:
CREATE Procedure UDP_INSERT_TABLES3
@shape_type varchar(30)
,@wktdata varchar(max)
,@label varchar(40)
AS
BEGIN
set nocount on;
if @shape_type = 'Point'
BEGIN
insert into Points (Point, Label)
values (geography::STGeomFromText('POINT' + @wktdata, 4326), @label)
END
END
然后是这些陈述:
exec UDP_INSERT_TABLES3 'Point', '(179.59 -40.35)', 'My House'
SELECT Point, Label, Point.ToString() as PointString FROM POINTS
提供:
Point Label PointString
0xE6100000010CCDCCCCCCCC2C44C07B14AE47E1726640 My House POINT (179.59 -40.35)