Någon som klarar av att fixa en SQL fråga som returnerar en sträng med id på alla poster som är rekursivt refererade via idParent på nedanstående tabell. SQL är roligt. Dock så förstår jag inte frågan. tänk att tabellens innehåll är som nedan Med lite fusk med en extra tabell så kan jag ju plocka ut alla ID jag behöver. Men det borde finnas snyggare lösning.... Jo jag vet att. Lite därför jag hoppas hitta en bättre lösning. Någon som har förslag? Följande två artiklar beskriver hur man hanterar hierarkier i SQL. Den andra artikeln är mer komplett om jag minns rätt.Gräva i en tabell
<code>
CREATE TABLE [tblTree] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[idParent] [int] NOT NULL ,
CONSTRAINT [PK_tblTree] PRIMARY KEY (id),
CONSTRAINT [FK_tblTree] FOREIGN KEY (idParent) REFERENCES tblTree([id]))
</code>Sv: Gräva i en tabell
Så om du inte får nått annat svar så kan du gärna förklara för mig vad "rekursivt refererade" betyder så kanske jag kan lösa det.Sv:Gräva i en tabell
id idParent
1 1
2 1
3 1
4 3
5 5
6 5
Om jag då vill hitta alla som refererar till posten med id 1 rekursivt så blir det ju så att att posten med id 2 och 3 refererar till id 1. Men sen så är det ju så att posten 4 refererar till 3 som refererar till 1 altså refererar den "rekursivt" till post 1. Hur långt nästlat ned det kan vara är okänt.
Så om jag skickar in "1" till en stored procedure vill jag ha tillbaks "1,2,3,4" och skickar jag in 5 så vill jag ha tillbaks "5,6"Sv: Gräva i en tabell
<code>
CREATE TABLE tmpTable ([id] int, akey int)
CREATE PROCEDURE spGetTblTreeString
@@id int,
@@key int
AS
DECLARE @@intTmpID int
DECLARE @idCursor CURSOR
SET @idCursor = CURSOR LOCAL SCROLL FOR
SELECT [id] FROM tblTree WHERE idParent = @@id and @@id <> [id]
OPEN @idCursor
FETCH NEXT FROM @idCursor INTO @@intTmpID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO tmpTable values(@@intTmpID, @@key)
EXEC ('EXEC spGetTblTreeString ' + @@intTmpID + ', ' + @@key )
FETCH NEXT FROM @idCursor INTO @@intTmpID
END
CLOSE @idCursor
DEALLOCATE @idCursor
</code>
Och sen en select från tmpTableSv: Gräva i en tabell
Sv:Gräva i en tabell
http://vyaskn.tripod.com/hierarchies_in_sql_server_databases.htm
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=8826&pg=1