Идея в том, что когда 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
)
У вас есть один столбец с именем [Location]
(до Point_Image
), и вы пытаетесь добавить другой столбец с таким же именем. Вы хотите обновить данные в существующем столбце или изменить этот столбец, чтобы он стал вычисляемым столбцом?
@RazvanSocol я хочу обновить Location
автоматически
Пара вещей: 1. Я бы посмотрел на статический метод Point()
как на менее подробный способ определения вашей точки (docs.microsoft.com/en-us/sql/t-sql/spatial-geometry/…) 2. Всякий раз, когда я вижу, что кто-то использует geometry
для чего-то, что представляет местоположения на Земле, я немного нервничаю. зуд (поскольку он не принимает во внимание такие вещи, как кривизна Земли, пересечение нулевого меридиана и другие странные вещи, связанные с вычислениями на сжатом сфероиде).
Вы хотите вставить 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)
да. Я хотел получить, когда Longitude
и Latitude
вставлены в таблицу Location
должны быть заполнены правильными данными. Как я могу написать это?
Ваш код пытается вставить новые строки в таблицу Points
, но терпит неудачу, потому что вы добавили дополнительное предложение values
и не указали значения для других столбцов, не допускающих значение NULL.
Уфф, ладно. Спасибо!
Если вы просто хотите обновить значения в существующем столбце [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)
Ошибка означает, что у вас уже есть столбец в таблице с именем
Location
. Опубликуйте свое заявлениеCREATE TABLE
, если вам нужна помощь в устранении ошибки.