SQL服务器; STDistance 函数在更新语句中不起作用
SQL Server; STDistance function not working in update statements
我有一个table这样的
EventTable (IsFar bit, Location geography)
Select 语句没有问题:
我可以简单地运行这个没有错误:
DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);
SELECT * FROM EventTable WHERE @center.STDistance(Location) > 100000
不使用 Update 语句: 但是当我想根据它与某个点的距离更新 IsFar
列时,它抛出异常
Incorrect syntax near '>'.
代码如下:
DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);
UPDATE EventTable SET IsFar = @center.STDistance(Location) > 100000
谁能解释为什么这不起作用?
您需要添加 Where
子句
UPDATE EventTable SET IsFar = @center.STDistance(Location)
where @center.STDistance(Location) > 100000
根据您的评论
UPDATE eventtable
SET isfar = CASE
WHEN @center.STDistance(location) > 100000 THEN 1
ELSE 0
END
如果您使用 Sql Server 2012+
那么您可以使用 IIF
UPDATE eventtable
SET isfar = IIF(@center.STDistance(location) > 100000, 1, 0)
根据您的要求替换 case
语句中的 0
和 1
我有一个table这样的
EventTable (IsFar bit, Location geography)
Select 语句没有问题: 我可以简单地运行这个没有错误:
DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);
SELECT * FROM EventTable WHERE @center.STDistance(Location) > 100000
不使用 Update 语句: 但是当我想根据它与某个点的距离更新 IsFar
列时,它抛出异常
Incorrect syntax near '>'.
代码如下:
DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);
UPDATE EventTable SET IsFar = @center.STDistance(Location) > 100000
谁能解释为什么这不起作用?
您需要添加 Where
子句
UPDATE EventTable SET IsFar = @center.STDistance(Location)
where @center.STDistance(Location) > 100000
根据您的评论
UPDATE eventtable
SET isfar = CASE
WHEN @center.STDistance(location) > 100000 THEN 1
ELSE 0
END
如果您使用 Sql Server 2012+
那么您可以使用 IIF
UPDATE eventtable
SET isfar = IIF(@center.STDistance(location) > 100000, 1, 0)
根据您的要求替换 case
语句中的 0
和 1