与SQL交叉功能

时间:2013-11-12 05:07:13

标签: sql sql-server function geometry intersect

我正在尝试创建一个函数,用于查找SQL Server中两个表之间的相交几何(匹配行)。除非我运行该功能,否则会给我一个错误。

“不允许从数据类型几何体到varchar的隐式转换。” - (错误)

这是我到目前为止所拥有的。

create function FindIntersectingZone
(
@location geometry
)
returns varchar(50)
as

begin
declare @NameOfZone varchar(50)

select @NameOfZone = geom from [planning_districts_2008_updated]

where
geom.STIntersects(@location) = 1

return @NameOfZone;

end
  • location 是列的名称在第一个表中,数据类型设置为几何。

  • geom 是第二个表中列的名称,数据类型也设置为几何

  • 我不确定我做错了什么。

有什么想法吗?非常感激。谢谢。

2 个答案:

答案 0 :(得分:2)

您无法在行

中隐式转换geometryvarchar
select @NameOfZone = geom from [planning_districts_2008_updated]

将其更改为

select @NameOfZone = geom.ToString() from [planning_districts_2008_updated]

并将方法和变量的值返回到nvarchar(max)

答案 1 :(得分:2)

在我看来,你的SQL Syntaxt不太合适。您的错误来自以下行:

  

从[planning_districts_2008_updated]中选择@NameOfZone = geom

我认为您希望为变量强制转换为varchar,并使用select的结果作为值。尝试:

declare @NameOfZone varchar(50)

SET @NameOfZone = (
    select CAST(geom as varchar(50)) as geomVarchar  
    from [planning_districts_2008_updated]
    where geom.STIntersects(@location) = 1
)
return @NameOfZone;

或者直接使用select的结果而不需要变量:

create function FindIntersectingZone
(
@location geometry
)
returns varchar(50)
as

begin
    select CAST(geom as varchar(50)) as geomVarchar  
    from [planning_districts_2008_updated]
    where geom.STIntersects(@location) = 1
end