【问题标题】:How do I store Point datatype in SQL Server?如何在 SQL Server 中存储 Point 数据类型?
【发布时间】:2014-04-22 04:50:27
【问题描述】:

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

我正在考虑将其设为nvarchar,然后插入一个点字符串,例如:100,246,然后在我从数据库中读取值时拆分字符串,但有没有办法将其插入为 @987654324 @?

【问题讨论】:

  • 您的意思是 x,y 坐标中的点吗?
  • @Katstevens 是的,我愿意。
  • 无法序列化?
  • @SimonWhitehead 哦,我从没想过。 :) 根本不可能。
  • 不要将两个元素粘贴到一个列中 - 这违反了数据库设计的第一范式 - 一个列,一个价值.

标签: c# asp.net sql .net sql-server


【解决方案1】:

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:link

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

【讨论】:

    【解决方案2】:

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

    X int,
    Y int
    

    【讨论】:

      【解决方案3】:

      如果您在谈论地理点,那么可以查看“圆形地球坐标系”的 geography 数据类型或“欧几里德(平面)坐标系”的 geometry 数据类型。

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

      【讨论】:

        【解决方案4】:

        对于地理点:

        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;
        

        【讨论】:

          猜你喜欢
          • 2014-07-16
          • 2023-03-20
          • 1970-01-01
          • 2014-06-11
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多