Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Genera vista con X e Y dal tipo di geometria

Non penso che tu possa farlo in una vista, ma puoi creare una funzione definita dall'utente con valori di tabella (una funzione che restituisce una tabella) per ottenere ciò che desideri.

Questo esempio utilizza una tabella definita come

CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

che memorizza diversi tipi di geometria (nell'esempio che ho collegato di seguito ho usato 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;

Vedi questo campione SQL Fiddle per un esempio di lavoro completo.