SQLServer 空间查询返回错误在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'

Posted

技术标签:

【中文标题】SQLServer 空间查询返回错误在预期条件的上下文中指定的非布尔类型的表达式,靠近 \')\'【英文标题】:SQLServer Spatial query is returning error An expression of non-boolean type specified in a context where a condition is expected, near ')'SQLServer 空间查询返回错误在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')' 【发布时间】:2011-03-23 22:36:10 【问题描述】:

我正在尝试学习如何使用新的 SqlServer 2008 托管空间类型和方法(地理)对记录进行半径搜索以进行地理空间计算。我正在关注此网页上的示例:

http://msdn.microsoft.com/en-us/magazine/dd434647.aspx

我正在专门尝试做这个示例:

-- or declare POINT for "downtown Seattle"
-- 1609.344 meters per mile
DECLARE @Seattle geography = 'POLYGON(....)'; SELECT c.customerid FROM
 customer c WHERE c.geog.STIntersects(@Seattle.STBuffer(10 * 1609.344));

但是,即使在运行查询之前(或者当我运行查询时——编译和运行时错误),我也会收到以下错误消息:

An expression of non-boolean type specified in a context where a condition is expected, near ')'

我真的对此感到困惑。我没有做完全相同的查询(我将自己的数据与地理列一起使用),但它与示例几乎相同。我正在运行 Sql SErver 2008 SP2 标准版 64 位。当我键入查询时,它对 STIntersection 方法使用智能感知并显示 (other_geography geography) 示例,因此它知道该方法存在。我正确地关闭了括号并用分号分隔表达式,但我无法弄清楚为什么会出现错误。谷歌搜索无效。

有什么想法吗?

赛斯

【问题讨论】:

【参考方案1】:

STIntersects 返回 0 或 1。试试这个:

WHERE c.geog.STIntersects(@Seattle.STBuffer(10 * 1609.344)) = 1

【讨论】:

做到了。感谢您的帮助

以上是关于SQLServer 空间查询返回错误在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'的主要内容,如果未能解决你的问题,请参考以下文章

为啥sqlserver查询不到数据

奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012

Apollo 查询返回错误“预期字符串,找到字符串”

Sqlserver存储过程返回表,如何实现?

SQLServer数据库返回错误的国际化

ASP.NET SQL 查询未返回预期结果