như tất cả chúng ta đều biết, khung thực thể không thể chứa dữ liệu địa lý. Ý tưởng của tôi là, để chỉ định kinh độ và vĩ độ làm số thập phân trong mô hình của tôi. Sau khi thực thi kịch bản lệnh SQL để tạo các bảng, tôi sẽ bắt đầu một kịch bản lệnh khác để thêm một cột địa lý. Sau đó, tôi muốn cập nhật cột này trên mọi INSERT hoặc UPDATE (trên kinh độ và vĩ độ) bằng một trình kích hoạt. Kích hoạt sau đây có ổn không, hoặc nó có gì xấu không? Tôi hỏi vì tôi không quen với kích hoạt, nhưng nó hoạt động ngay bây giờ.Trình kích hoạt cho INSERT và UPDATE trên cùng một bảng
CREATE TRIGGER Update_Geography
ON [People]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @longitude DECIMAL(8, 5), @latitude DECIMAL(8, 5)
SET @longitude = (SELECT ins.Location_Longitude FROM inserted ins)
SET @latitude = (SELECT ins.Location_Latitude FROM inserted ins)
IF (@longitude != 0 AND @latitude != 0)
BEGIN
UPDATE [People]
SET
Location_Geography = geography::STGeomFromText('POINT(' + CONVERT(VARCHAR(100),@longitude) + ' ' + CONVERT(VARCHAR(100),@latitude) + ')',4326)
WHERE
Id = (SELECT ins.Id FROM inserted ins)
END
END
Sẽ rất vui nếu ai đó có thể giúp tôi.
Trân
Edit:
kịch bản trông giống như rằng:
ALTER TABLE [People] ADD Location_Geography AS (
CONVERT(GEOGRAPHY, CASE
WHEN Location_Latitude 0 AND Location_Longitude 0 THEN
geography::STGeomFromText('POINT(' + CONVERT(VARCHAR, Location_Longitude) + ' ' + CONVERT(VARCHAR, Location_Latitude) + ')',4326)
ELSE
NULL
END
)
)
công trình nhưng không thể truy vấn cột rằng:/ Thx
kích hoạt của bạn sẽ gây ra toàn vẹn dữ liệu vấn đề nếu bất kỳ quá trình nào từng cập nhật hoặc chèn một loạt bản ghi. Không bao giờ viết trình kích hoạt giả định chỉ có một bản ghi sẽ được chèn vào. – HLGEM
cách sửa đổi nó? – john
Bỏ phiếu cho mục Kết nối này: http://connect.microsoft.com/SQLServer/feedback/details/378126/how-to-persist-a-calculated-geometry-or-geography-column –