Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ansicht mit X und Y aus Geometrietyp generieren

Ich glaube nicht, dass Sie dies in einer Ansicht tun können, aber Sie können eine benutzerdefinierte Funktion mit Tabellenwert erstellen (eine Funktion, die eine Tabelle zurückgibt), um das zu erhalten, was Sie wollen.

Dieses Beispiel verwendet eine als

definierte Tabelle
CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

die verschiedene Geometrietypen speichert (in dem Beispiel, das ich unten verlinkt habe, habe ich POINT, MULTIPOINT, LINESTRING und POLYGON verwendet).

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;

Sehen Sie sich dieses Beispiel für eine SQL-Fiddle an für ein vollständiges Arbeitsbeispiel.