如何在SQL Server中存储Point数据类型

本文关键字:存储 Point 数据类型 Server SQL | 更新日期: 2023-09-27 17:59:21

如何在SQL Server数据库中最好地存储Point数据类型?

我想把它设为nvarchar,然后插入一个点字符串,比如:100,246,然后在我从DB读取值时拆分字符串,但有没有办法只插入为Point

如何在SQL Server中存储Point数据类型

SQL Server确实支持Point数据类型:

创建表格:

CREATE TABLE [dbo].[PointTest]
(
    [RowId] [int] IDENTITY(1,1) NOT NULL,
    [MyPoint] [GEOMETRY] NOT NULL,
) 

插入(SRID=4326):

INSERT INTO PointTest(MyPoint) values (GEOMETRY::Point(3, -4, 4326))

选择:

SELECT MyPoint.STX X, MyPoint.STY Y FROM PointTest;

SQLFiddle:链接

有关空间数据类型的更多信息:

  • 空间数据

您可以为每个维度定义2个int变量。这样就不需要对从DB中读取的值进行拆分。

X int,
Y int

如果你谈论的是地理点,那么也许可以看看"圆形地球坐标系"的地理数据类型,或者"欧几里得(平面)坐标系统"的几何数据类型。

自2008年左右以来,SQL Server的空间数据功能可以帮助查询空间数据的各种方法,包括(但不限于)点。

对于地理点:

create table foo (
  id int primary key,
  latlon [GEOGRAPHY]
);
insert into foo values (1, geography::Point(40.7, -74, 4326));
select 
  latlon.Lat as latitude,
  latlon.Long as longitude,
  latlon.ToString() as plaintext
from foo;