我不认为你可以做到这一点的观点,但你可以创建一个表值用户定义函数(函数返回一个表)来获得你想要的。
本例使用定义为
CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)
,其存储不同的几何形状的类型(在我联下面我用点,多点,LINESTRING和POLYGON的例子)的表。
CREATE FUNCTION dbo.GetVertices()
RETURNS @ret TABLE (GeomKey INT, X INT, Y INT, PointNo INT)
AS
BEGIN
DECLARE @max INT
SET @max = (SELECT MAX(vector.STNumPoints()) FROM GeoTable)
;WITH Sequence(Number) AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number + 1
FROM Sequence
WHERE Number < @max
)
INSERT INTO @ret
SELECT
gt.GeomKey
,gt.vector.STPointN(nums.number).STX AS X
,gt.vector.STPointN(nums.number).STY AS Y
,nums.number AS PointNo
FROM GeoTable gt, Sequence nums
WHERE nums.number <= gt.vector.STNumPoints()
RETURN
END;
查看此sample SQL Fiddle为一个完整的工作示例。
来源
2014-09-06 18:29:15
jpw
你存储什么类型的几何?多点还是其他? – jpw 2014-09-03 09:57:00
我正在使用Point,Polygone和LineString – user3752907 2014-09-06 16:11:09