2015-12-25 101 views
0

我有这样SQL Server; STDistance功能更新语句

事件表表(IsFar ,位置地理

用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 

谁都可以解释为什么这不起作用?

回答

2

您需要添加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) 

在更换01根据您的需要case声明

+0

好主意,但'IsFar'是类型'bit'不'float' –

+0

@HosseinNarimaniRad - 现在检查 –

+0

是的,它解决了问题,但我没想到这么多的代码和我米惊讶为什么SQL只是不支持该语法 –