renholmMedlem sedan apr. 20012 266 inlägg Har ett en tabell som ser ut så här:
node_id uniqueidentifier 16 0
node_parent uniqueidentifier 16 1
node_name nvarchar 50 0
node_roles nvarchar 200 1
node_admins nvarchar 200 1
node_order int 4 0
node_domain nvarchar 50 1
Jag vill ha hela "trädet" med noder från den node som är vald, dvs om jag väljer node 36 så ska den kolla vilka noder som har den som parent och vilka noder som finns ovanför node 36. Har försökt mig på detta men får det inte riktigt att funka, stöter på problem då jag ska gå uppåt i hierarkin.
Min stored procedure
DECLARE @currentnodeparent uniqueidentifier
SET @currentnodeparent = (SELECT node_parent FROM Nodes WHERE node_id = @nodeid)
SELECT * FROM Nodes WHERE node_id = @nodeid
SELECT * FROM Nodes WHERE node_parent = @nodeid
WHILE @currentnodeparent <> null
BEGIN
SELECT * FROM Nodes WHERE node_id = @currentnodeparent
SET @currentnodeparent = (SELECT node_parent FROM Nodes WHERE node_id = @currentnodeparent)
END
Någon som har någon lösning/annat sätt att göra det på?
btw, finns det någon nackdel med att använda uniqueidentifier? använder den för att undvika att det ska bli problem vid ihopslagningar av data osv.
LarsGMedlem sedan dec. 200012 464 inlägg renholmMedlem sedan apr. 20012 266 inlägg Hum, den var inte riktigt vad jag ville ha, vill ha så att noderna över väljs, inte de som ligger under. Har försökt att göra om den kod som fanns i exemplet men får inte till det. Förslag?
renholmMedlem sedan apr. 20012 266 inlägg Ah, fick igång min kod jag hade i ursprungsinlägget, var uniqueidentifier som ställde till det, ändrade till vanligt int.
renholmMedlem sedan apr. 20012 266 inlägg Nu är jag tillbaka fast denna gång måste jag använda uniqieidentifier. Försökte med samma kod men #stack innehåller ingen data.
DECLARE @i int
DECLARE @current uniqueidentifier
SET @current = '{011DAF52-C53D-4017-89C7-603EE1A4DE5C}'
CREATE TABLE #stack (node_guid uniqueidentifier, node_name nvarchar(50), node_position int)
WHILE @current <> null
BEGIN
INSERT #stack
SELECT node_guid, node_name, @i FROM Nodes WHERE node_guid = @current
SELECT @current = node_parentid FROM Nodes WHERE node_guid = @current
SET @i = (@i + 1)
END
SELECT * FROM #stack ORDER BY node_position DESC
SELECT @current
DROP TABLE #stack
Tabellen
{00000000-0000-0000-0000-000000000000} 1 1 1 Root
{AA3C8C07-1273-4177-85B6-430115647B12} {011DAF52-C53D-4017-89C7-603EE1A4DE5C} 1 7 1 Child 1 1 1
{011DAF52-C53D-4017-89C7-603EE1A4DE5C} {B95A9A7F-A165-47C6-A8A3-EE9C330F4677} 1 5 1 Child 1 1
{B95A9A7F-A165-47C6-A8A3-EE9C330F4677} {00000000-0000-0000-0000-000000000000} 1 3 1 Child 1
Vad kan vara fel? Finns det något bättre sätt att få tag på vilka Nodes som är över i hierarkin?
renholmMedlem sedan apr. 20012 266 inlägg Dumma mig, is not null ska det vara i stället för <>.