这个想法是在Longitude
插入Latitude
和Location
时必须填写正确的信息。但是,当我尝试编写此代码时,却遇到关于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
)
答案 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
列中插入Latitude
和Location
?如果是,则编写的语法不正确。
您可以尝试此操作,不确定是否可以解决您的问题。
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)