如何将点设置为地理列的默认值?

Posted

技术标签:

【中文标题】如何将点设置为地理列的默认值?【英文标题】:How to set a point as default value for a geography column? 【发布时间】:2014-07-17 08:28:29 【问题描述】:

我有这个 SQL 命令,它创建一个表,其中包含一个用于存储纬度/经度对(一个点)的空间数据的 GEOGRAPHY-type 列。如何为该列设置默认值?例如,(0,0) 处的点?

CREATE TABLE [dbo].[StationLocations] (
    [Id] [int] NOT NULL,
    [StationId] [int] NOT NULL,
    [Position] [Geography],
CONSTRAINT [PKStationLocations] PRIMARY KEY CLUSTERED ([Id]))

【问题讨论】:

【参考方案1】:

试试这个:

CREATE TABLE #TEMP(ID INT,COL1 GEOGRAPHY DEFAULT(CONVERT(GEOGRAPHY,'POINT (0 0)')))
INSERT INTO #TEMP (ID) VALUES(1)
SELECT * FROM #TEMP
ID  COL1
1   0xE6100000010C00000000000000000000000000000000

SELECT ID,CONVERT(VARCHAR,COL1) AS DEF_VALUE FROM #TEMP
ID  DEF_VALUE
1   POINT (0 0)

你的情况

CREATE TABLE [dbo].[StationLocations] (
    [Id] [int] NOT NULL,
    [StationId] [int] NOT NULL,
    [Position] [Geography] DEFAULT(CONVERT(GEOGRAPHY,'POINT (0 0)')),
CONSTRAINT [PKStationLocations] PRIMARY KEY CLUSTERED ([Id]))

【讨论】:

只是不要创建双重答案...也可以DEFAULT geography::Point(0, 0, 4326)【参考方案2】:

不确定这是否是最好的方法,但是,使用this answer 作为参考,您可以定义它like this:

ALTER TABLE dbo.StationLocations
ADD CONSTRAINT DF_StationLocations_Position
DEFAULT geography::STPointFromText('POINT (0 0)', 4326) FOR Position
;

【讨论】:

【参考方案3】:

我不认为你可以直接做到这一点。您可以以迂回的方式使用插入触发器,但这并不是一个完全令人满意的解决方案。

【讨论】:

以上是关于如何将点设置为地理列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置列的默认值?

如何将sqlalchemy中列的默认值设置为关系中列的值?

如何在 ORACLE TABLE 上重置列的默认值

SQL:将所有没有默认值的列的默认值设置为 NULL

将序列值设置为 HSQL 中列的默认值

prisma:为啥我不能将“null”设置为可空列的默认值?