1

我正在尝试创建一个函数来查找 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是第二个表中列的名称,数据类型也设置为几何

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

有任何想法吗?非常感激。谢谢。

4

2 回答 2

2

您不能隐式转换geometryvarchar内联

select @NameOfZone = geom from [planning_districts_2008_updated]

将其更改为

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

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

于 2013-11-12T05:20:56.607 回答
2

在我看来,您的 SQL 语法不太正确。您的错误来自以下行:

从 [planning_districts_2008_updated] 中选择 @NameOfZone = geom

我认为您想将变量转换为 varchar 并将您的选择结果用作值。尝试:

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
于 2013-11-12T05:21:33.453 回答