我正在尝试创建一个函数,用于查找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 是第二个表中列的名称,数据类型也设置为几何
我不确定我做错了什么。
有什么想法吗?非常感激。谢谢。
答案 0 :(得分:2)
您无法在行
中隐式转换geometry
到varchar
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