【发布时间】:2012-06-27 19:29:16
【问题描述】:
大家好:我正在尝试编写一个触发器,该触发器在插入到 SQL Server 2008 中的 Points 表后触发。我已经进行了第一次尝试,似乎可以正常工作,但无论我如何更改纬度值和后续插入中的经度,地理字段保持完全相同
USE GIS
IF EXISTS(SELECT name FROM SYSOBJECTS WHERE name = 'PointCreationTrigger' and type = 'TR')
DROP TRIGGER [dbo].[PointCreationTrigger]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[PointCreationTrigger]
ON [dbo].[Points]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Point AS GEOGRAPHY
DECLARE @Longitude AS FLOAT
DECLARE @Latitude AS FLOAT
DECLARE @WKT AS VARCHAR(256) -- well known text representation of a point
SET @Longitude = (SELECT i.Longitude FROM inserted i)
SET @Latitude = (SELECT i.Latitude FROM inserted i)
IF @Latitude IS NOT NULL AND @Longitude IS NOT NULL
BEGIN
IF @Latitude > -90 AND @Latitude < 90 AND @Longitude > -180 AND @Longitude < 180
BEGIN
SET @WKT = (SELECT 'POINT(' + CONVERT(VARCHAR(16),@Longitude) + ' ' + CONVERT(VARCHAR(16), @Latitude) + ')')
SET @Point = geography::STGeomFromText(@WKT, 4326);
UPDATE [dbo].[Points] SET Point = @Point
END
END
END
GO
有什么建议吗...?
【问题讨论】:
-
您确定
@Latitude和@Longitude在限制范围内吗?例如。IF语句被执行。 -
您不能假设只会插入一条记录,如果在同一条语句中插入多条记录,此触发器将不起作用。您应该始终使用多条记录插入和单条记录插入来测试触发器。
标签: sql-server-2008 triggers insert geography