none
Frage zu einer SQL Abfrage RRS feed

  • Frage

  • Hallo,

    ich habe in einer MSSQL 2008 Express eine Tabelle, welche dazu dient, ein TreeView zu füllen. Dazu habe ich folgende Tabellenstruktur:

    LID - bigint, PK

    ParentID - bigint, ist der Vorgänger, also die LID des Vorgängers für das TreeView

    Name - varchar

    TypeArt - int, dient zur Selektierung

    Nun benötige ich eine Abfrage, welche als Kriterium das feld "TypeArt" abfragt.

    Select * from layouts where typeart=@TypeArt

    Damit möchte ich nun wieder ein TreeView füllen, d. h., ich benötige auch alle Datenfelder rekursiv, welche als Vorgänger dienen (ParentID).

    Gibt es dazu eine Möglichkeit, die Ergebnisse in einer SQL-Abfrage zu erhalten?

    Gruß

    Reiner

    Sonntag, 4. März 2012 16:19

Antworten

  • Hallo Reiner,

    Toplevel-Strukturen kannst Du am einfachsten mittels CTE abbilden. Das nachfolgende Beispiel habe ich mal anhand Deiner Anforderungen "versucht" :D

    USE tempdb
    GO
    
    IF EXISTS (SELECT * FROM sys.sysobjects WHERE id = OBJECT_ID('dbo.tbl_TreeViewStructure', 'U'))
    	DROP TABLE dbo.tbl_TreeViewStructure
    	GO
    
    CREATE TABLE	dbo.tbl_TreeViewStructure
    (
    	LId			int				NOT NULL	IDENTITY(1, 1),
    	ParentId	int,
    	NodeName	nvarchar(128),
    	
    	CONSTRAINT pk_tbl_TreeViewStructure PRIMARY KEY NONCLUSTERED (LId) 
    )
    GO
    
    -- Eintragen von Testdaten
    INSERT INTO dbo.tbl_TreeViewStructure
    (ParentId, NodeName)
    VALUES
    (NULL, 'ParentNode1'),
    (NULL, 'ParentNode2'),
    (NULL, 'ParentNode3'),
    (1, 'ChildNode1'),
    (1, 'ChildNode2'),
    (2, 'ChildNode3'),
    (4, 'ChildChildNode1'),
    (4, 'ChildChildNode2')
    GO
    
    -- Nun mal die Strukture abbilden
    WITH TV_CTE AS
    (
    	SELECT	ParentId, LId, NodeName FROM dbo.tbl_TreeViewStructure WHERE ParentId IS NULL
    	UNION ALL
    	SELECT	t.ParentId, t.LId, t.NodeName FROM dbo.tbl_TreeViewStructure t INNER JOIN TV_CTE v ON (t.ParentId = v.LId)
    )
    SELECT * FROM TV_CTE
    ORDER BY
    	ParentId, NodeName

    Mehr zu CTE findest Du hier:
    http://msdn.microsoft.com/en-us/library/ms186243.aspx
    http://msdn.microsoft.com/en-us/library/ms190766.aspx


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de

    Sonntag, 4. März 2012 16:53

Alle Antworten