首页 > 解决方案 > 解决在触发器上指定的非布尔类型的表达式,用于检查纬度和经度

问题描述

我想创建一个检查纬度和经度的触发器,但我无法添加此触发器,因为我有错误

消息 4145,级别 15,状态 1,过程 t_point_between,第 5 行 [Batch Start Line 0] 在预期条件的上下文中指定的非布尔类型表达式,靠近 ')'。

我的触发器看起来

create trigger t_point_between
on Vehicle
after insert 
as
begin
    declare @latitude as float  
    declare @longitude as float 

    if (select latitude from Vehicle  v where v.latitude)< 19.7922354 and latitude > 20.2173455
    begin
        print 'Incorrect latitude!!!'
        print 'latitude must be between 19.7922354 and 20.2173455'
    end
    
    if (select longitude from Vehicle where longitude)< 49.9676667 and longitude > 50.1261338
    begin
        print 'Incorrect longitude!!!'
        print 'longitude must be between 49.9676667 and 50.1261338'
    end     
end
go

插入后触发检查必须来自该点的纬度和经度,当纬度不是来自该点时打印消息。

为什么我有这个问题?有人可以解释为什么吗?

标签: sqlsql-servertsqltriggers

解决方案


根本不要使用 a TRIGGER,使用 a CHECK CONSTRAINT

ALTER TABLE dbo.Vehicle
ADD CONSTRAINT chk_VehicleLocale CHECK (latitude >= 19.7922354
                                    AND latitude <= 20.2173455
                                    AND longitude >= 49.9676667
                                    AND longitude <= 50.1261338);

推荐阅读