Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Générer une vue avec X et Y à partir du type de géométrie

Je ne pense pas que vous puissiez le faire dans une vue, mais vous pouvez créer une fonction définie par l'utilisateur (une fonction qui renvoie une table) pour obtenir ce que vous voulez.

Cet exemple utilise une table définie comme

CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

qui stocke différents types de géométrie (dans l'exemple que j'ai lié ci-dessous, j'ai utilisé POINT, MULTIPOINT, LINESTRING et 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;

Voir cet exemple de SQL Fiddle pour un exemple de travail complet.