插入x和y后,自动填充GEOMETRY

时间:2019-04-07 17:51:07

标签: sql sql-server tsql

这个想法是在Longitude插入LatitudeLocation时必须填写正确的信息。但是,当我尝试编写此代码时,却遇到关于Column names in each table must be unique. Column name '[Location]' in table 'Points' is specified more than once.

的错误

这是代码块。

ALTER TABLE Points
ADD [Location] AS (CONVERT(GEOMETRY, CASE WHEN Longitude<> 0
                                    AND Latitude<> 0
                               THEN GEOMETRY::STGeomFromText('POINT('
                                                          + CONVERT(VARCHAR, Longitude)
                                                          + ' '
                                                          + CONVERT(VARCHAR, Latitude)
                                                          + ')', 4238)
                               ELSE NULL
                          END))

这就是Points

CREATE TABLE Points(
Id int PRIMARY KEY IDENTITY(1,1),
Route_Id int FOREIGN KEY REFERENCES [Routes](Id) ON DELETE CASCADE NOT NULL,
Title nvarchar(30) NOT NULL,
[Description] nvarchar NOT NULL ,
Latitude FLOAT NOT NULL,
Longitude FLOAT NOT NULL,
[Location] geometry ,
Point_Image IMAGE 
)

2 个答案:

答案 0 :(得分:3)

如果您现在只想更新现有[Location]列中的值,则可以使用:

UPDATE  dbo.Points
SET     Location = CONVERT(GEOMETRY, 
    CASE WHEN Longitude <> 0 AND Latitude <> 0 
        THEN geometry::STGeomFromText(
            'POINT(' + CONVERT(VARCHAR, Longitude) + ' ' + CONVERT(VARCHAR, Latitude) + ')'
            , 4238)
        ELSE NULL
    END)

如果要有一个将始终返回计算数据的计算列,则应删除现有列并创建另一个列:

ALTER TABLE dbo.Points DROP COLUMN Location
GO
ALTER TABLE Points ADD [Location] AS CONVERT(GEOMETRY, 
    CASE WHEN Longitude <> 0 AND Latitude <> 0 
        THEN geometry::STGeomFromText(
            'POINT(' + CONVERT(VARCHAR, Longitude) + ' ' + CONVERT(VARCHAR, Latitude) + ')'
            , 4238)
        ELSE NULL
    END)

答案 1 :(得分:0)

是否要在Longitude列中插入LatitudeLocation?如果是,则编写的语法不正确。

您可以尝试此操作,不确定是否可以解决您的问题。

Insert into Points ([Location])values 
(select (CONVERT(GEOMETRY, CASE WHEN Longitude<> 0
                                    AND Latitude<> 0
                               THEN  
                                                          + CONVERT(VARCHAR, Longitude)
                                                          + ' '
                                                          + CONVERT(VARCHAR, Latitude)

                               ELSE NULL
                          END))
from Points)