Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Gerar vista com X e Y do tipo de geometria


Eu não acho que você possa fazer isso em uma visão, mas você pode criar uma função definida pelo usuário com valor de tabela (uma função que retorna uma tabela) para obter o que deseja.

Este exemplo usa uma tabela definida como
CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

que armazena diferentes tipos de geometria (no exemplo que vinculei abaixo usei POINT, MULTIPOINT, LINESTRING e 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;

Veja este exemplo de violino SQL para um exemplo de trabalho completo.