Когда x и y вставлены, заполните GEOMETRY автоматически - PullRequest
1 голос
/ 07 апреля 2019

Идея заключается в том, что 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 
)

Ответы [ 2 ]

3 голосов
/ 07 апреля 2019

Если вы просто хотите обновить значения в существующем столбце [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)
0 голосов
/ 07 апреля 2019

Хотите вставить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...