在 SQL Server 中插入点?

Posted

技术标签:

【中文标题】在 SQL Server 中插入点?【英文标题】:Insert points into SQL Server? 【发布时间】:2012-11-15 05:09:23 【问题描述】:

python 新手并喜欢它,我想这可能是一个简单的。 我目前在pymssql 的帮助下通过 Python 脚本将点插入 SQL Server 2008。

var1 = "hi"
lat = "55.92"
lon = "-3.29"

cursor.execute("INSERT INTO table (field1, x, y) VALUES(%s, %s, %s)", 
(var1 , lat, lon))

这一切都很好。 我还需要将这些坐标插入到 GEOGRAPHY type 字段(称为 geog)中。

geog_type = "geography::STGeomFromText('POINT(%s %s)',4326))" % (lat, lon)

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type))

这会引发以下异常:

输入知名文本 (WKT) 中的标签 geography::STGeomFro 是 无效。有效标签为 POINT、LINESTRING、POLYGON、MULTIPOINT、 MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING, COMPOUNDCURVE、CURVEPOLYGON 和 FULLGLOBE(仅限地理数据类型)。

从 SSMS 我可以在表格上运行插入语句来插入一个点。

USE [nosde]
INSERT INTO tweets (geog) 
    VALUES(
        geography::STGeomFromText(
        'POINT(55.9271035250276 -3.29431266523898)',4326))

如果您需要更多详细信息,请在 cmets 中告诉我。

一些my workings on pastebin.

【问题讨论】:

这是完整的错误信息吗?如果是这样,geog_type 是否在执行的 SQL 中被截断,因为错误是抱怨“geography::STGeomFro”,而不是“geography::STGeomFromText” 我通过了,字符串是正确的,所以不确定它是否在其他地方被截断。 pastebin.com/D5twLB5h 【参考方案1】:

几个问题 - 首先,您以错误的顺序提供坐标 - STPointFromText() 方法首先需要经度,然后是纬度。

其次,使用 Point() 方法可能比 STPointFromText() 方法更容易,后者不需要任何字符串操作 - 只需直接提供两个数字坐标参数。 http://technet.microsoft.com/en-us/library/bb933811.aspx

但是,从错误消息来看,您发送的值似乎正试图被解析为 WKT 字符串。如果是这种情况,您无论如何都不希望额外的 geography::STGeomFromText 和 SRID - 这些都是假设的。所以尝试只提供:

geog_type = "'POINT(%s %s)'" % (lon, lat)

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type))

我不确定您是否需要在第一行中添加额外的单引号,但目前没有可以测试的系统。

【讨论】:

以上是关于在 SQL Server 中插入点?的主要内容,如果未能解决你的问题,请参考以下文章

sql server返回插入记录的ID(多条记录)

MySql 和Server Sql的差异

如何在 SQL Server 2005 中进行更新插入(更新或插入)

在 SQL Server 中插入经过的时间

SQL Server 在多个线程中插入死锁

如何在 SQL Server 中插入多行?