sql - 解决在触发器上指定的非布尔类型的表达式,用于检查纬度和经度
问题描述
我想创建一个检查纬度和经度的触发器,但我无法添加此触发器,因为我有错误
消息 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
插入后触发检查必须来自该点的纬度和经度,当纬度不是来自该点时打印消息。
为什么我有这个问题?有人可以解释为什么吗?
解决方案
根本不要使用 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);
推荐阅读
- java - Java 地图合集
收藏 - python - 带有 sequence_loss 的 Tensorflow Keras LSTM
- angular - 无法解析 ./src/debug/debug_node 的原始符号中的错误
- grafana - 黑盒导出器 probe_ssl_earliest_cert_expiry 在 grafna 中给出错误值
- sql - 在每个第一个有效条目之后在表中创建和填充缺失日期的行
- c++ - 如何在 MacOS (sierra-catalina) 上为分区获取可用空间
- c++ - 用于子集字符串的 Rcpp 函数
- sql-server - SQL Server 触发器插入重复项
- go - 当我尝试“go get google.golang.org/grpc/reflection”时出现错误“go.mod has post-v0 module”
- r - 在 R 中,如何使用 eeptools 根据出生日期计算年龄?