sql >> Base de Datos >  >> RDS >> Sqlserver

Generar vista con X e Y desde el tipo de geometría

No creo que pueda hacer esto en una vista, pero puede crear una función definida por el usuario con valores de tabla (una función que devuelve una tabla) para obtener lo que desea.

Este ejemplo usa una tabla definida como

CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

que almacena diferentes tipos de geometría (en el ejemplo que vinculé a continuación usé PUNTO, MULTIPUNTO, LINESTRING y 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;

Vea este muestra de SQL Fiddle para un ejemplo de trabajo completo.