使用空间函数时,使用另一个SQL Server数据库中的表更新表列

时间:2014-08-13 19:11:39

标签: sql-server tsql spatial

我想使用另一个数据库表的空间函数更新表列。这就是我提出的......

UPDATE FirstDatabase.dbo.track_logs
SET county = t2.CountyName
FROM OtherDatabase.dbo.tblCounty AS t2

WHERE t2.cty_geog.STIntersects(
GEOGRAPHY::STPointFromText('Point(' + FirstDatabase.dbo.track_logs.lng + ' ' +
FirstDatabase.dbo.track_logs.lat + ')', 26915)
)

但我收到此错误... 在预期条件的上下文中指定的非布尔类型的表达式,接近'。'。

1 个答案:

答案 0 :(得分:0)

几乎就在那里。这是TSQL中那些愚蠢的事情之一。您需要= 1

这是您问题的答案,但我也很想用POINT(lat, lon, SRID)来解答您的评论。

UPDATE FirstDatabase.dbo.track_logs
SET county = t2.CountyName
FROM OtherDatabase.dbo.tblCounty AS t2
WHERE t2.cty_geog.STIntersects(geography::Point(FirstDatabase.dbo.track_logs.lat,
                                                FirstDatabase.dbo.track_logs.lng,
                                                26915)) = 1

在像C#这样的语言中,您可以编写如下内容:

bool val = true;

if (val)
    // do stuff

但是在TSQL中,你必须写相当于:

bool val = true;

if (val == true)
    // do stuff

这并非特定于SQL Spatial,当然,您还必须指定WHERE bitColumnName = 1,或者如您的示例所示,WHERE bitReturningFunction(args) = 1