Um, I appreciate the response!  But this is way over
my head.  Does SQL Server really not have a
counterpart to Oracle's functions "START WITH" and
"CONNECT BY PRIOR"???

Seemed like such a simply query in Oracle:

><CFQUERY NAME="GetEntities"
> DATASOURCE="MyDatasource">
> >     SELECT iEntityID, iSubEntityOf, sName
> >     FROM Mytable
> >     WHERE NOT iEntityID
> >     START WITH iEntityID=1
> >     CONNECT BY PRIOR iEntityID=iSubEntityOf
> ></CFQUERY>

Thanks!

-Richard


--- Chris <[EMAIL PROTECTED]> wrote:
> Here is a stored procedure I used for an old forum
> app.  Should work for
> your situation.
> 
> --DROP TABLE #stack
> --DROP TABLE #x
> --DROP TABLE #y
> --CREATE PROCEDURE expand (@current int) as
> DECLARE @current int
> DECLARE @level int, @line char(20)
> DECLARE @Pos int
> DECLARE @PrevReplyTo int
> CREATE TABLE #stack (item int, Thislevel int)
> CREATE TABLE #x (ID int, Name varchar(256),
> DateCreated datetime, InReplyTo
> int, Topic int, TotalReply int, Creator int, IsTop
> bit, Root int, TopDate
> datetime, _USER_ID int, MessageFrom
> varchar(256),ThisLevel int, Position
> int)
> CREATE TABLE #y (ID int, InReplyTo int, Root int)
> SET @current = 94
> SET @Pos = 0
> SET @PrevReplyTo = @current
> INSERT #y
>       SELECT ID,InReplyTo, Root
>       FROM Threads
>       WHERE Root = @current
>       ORDER BY DateCreated DESC
> 
> INSERT #x
>       SELECT  Threads.ID AS "ID",
>                       Threads.Name AS "Name",
>                       Threads.DateCreated AS "DateCreated",
>                       Threads.InReplyTo AS "InReplyTo",
>                       Threads.Topic AS "Topic",
>                       Threads.TotalReply AS "TotalReply",
>                       Threads.Creator AS "Creator",
>                       Threads.IsTop AS "IsTop",
>                       Threads.Root AS "Root",
>                       Threads.TopDate AS "TopDate",
>                       Users.ID AS "_USER_ID",
>                       Users.Userid AS "MessageFrom",
>                       0,
>                       0
>       FROM Threads,Users 
>       WHERE Threads.Root = @current AND Threads.Creator =
> Users.ID
> 
> SET NOCOUNT ON
> INSERT INTO #stack VALUES (@current, 1)
> SELECT @level = 1
>   
> WHILE @level > 0
> BEGIN
>       IF EXISTS (SELECT * FROM #stack WHERE Thislevel =
> @level)
>       BEGIN
>               -- If an item on the stack exists at this level,
> grab it
>               SELECT @current = item FROM #stack WHERE Thislevel
> = @level
> 
>               -- Increment the position
>               SET @Pos = @Pos + 1
>               -- Update the table with the new position
>               UPDATE #x SET Position = @Pos, ThisLevel = @level
> - 1 WHERE ID = @current
>               -- Delete this entry from the temp table (#y)
>               DELETE FROM #y WHERE ID = @current
> 
>               -- Delete this entry from the stack
>               DELETE FROM #stack WHERE Thislevel = @level AND
> item = @current
>               -- Insert into the stack any IDs that are replies
> to the CURRENT ID
>               INSERT #stack   SELECT ID, @level + 1 FROM #y WHERE
> InReplyTo = @current
>               -- If any were found, increment the level
> 
>               IF @@ROWCOUNT > 0
>                       SELECT @level = @level + 1
>       END
>       ELSE
>               SELECT @level = @level - 1
> 
>       
>       IF ((SELECT COUNT(*) FROM #y) > 0 AND (SELECT
> COUNT(*) FROM #stack) = 0)
>       BEGIN
>               IF @level = 0
>                       SELECT @level = @level + 1
>       
>               INSERT #stack
>               SELECT ID, @level + 1 FROM #y
>               SELECT * FROM #stack
>       END
> 
> END -- WHILE
> 
> DROP TABLE #stack
> SELECT ID,Name,ThisLevel,Position FROM #x ORDER BY
> Position,DateCreated
> 
> 
> DROP TABLE #x
> DROP TABLE #y
> 
> 
> 
> 
> 
> ----------------------------------------------
> Original Message
> From: "Hagan, Ryan Mr (Contractor
> ACI)"<[EMAIL PROTECTED]>
> Subject: RE: SQL syntax for Supertypes-Subtypes AKA
> Circular Reference AKA
> Entity Tree
> Date: Wed, 27 Aug 2003 11:21:52 -0400
> 
> >I asked a very similar question a few weeks ago. 
> One solution was posted
> by
> >Jochem van Dieten:
> >
> >Use a nested set model, or use a 2 table model
> where one table holds 
> >complete trees in an XMLData field (which you only
> need to edit when a 
> >new element is inserted) and one holds individual
> messages but with an 
> >FK to the table that holds the complete trees in
> XML.
> >I usually prefer the first solution, but in some
> cases the latter 
> >solution allows you to offload the whole thing to
> the client and let the 
> >client figure it out using XSLT. Something like: 
>
>http://spike.oli.tudelft.nl/jochemd/test/tree/test.xml
> >
> >
> >If you want more info, check out the archives.  The
> thread was:
> >
> >Re: recursion in cold fusion ( was RE: Creating a
> list with infinite
> >groupings and indents )
> >
> >
> >-----Original Message-----
> >From: Blum, Jason (SAA)
> [mailto:[EMAIL PROTECTED]
> >Sent: Wednesday, August 27, 2003 11:13 AM
> >To: CF-Talk
> >Subject: SQL syntax for Supertypes-Subtypes AKA
> Circular Reference AKA
> >Entity Tree
> >
> >
> >Hello,
> >
> >Here's a puzzle for all you 'Joe Celko' types:
> >
> >Am trying to figure out how to do on SQL Server
> something I can do in
> >Oracle.  I think this problem is variously known as
> Subtypes-Supertypes,
> >Circular Reference, Entity Tree, etc...
> >
> >Given this data:
> >
> >Columns: iEntityID, iSubEntityOf, sName
> >1 1 Mary 
> >2 2 1 Fritz 
> >3 3 1 John 
> >4 4 2 Abu 
> >5 5 2 Ludwig 
> >6 6 3 Abigail 
> >7 7 3 Josef 
> >8 8 6 Mark 
> >9 9 6 Ben 
> >10 10 6 Habib 
> >11 11 9 Paul 
> >12 12 11 Mahatma
> >
> >I want to graphically represent the tree in this
> data - i.e. Mary is the
> >boss; Fritz and John report to Mary; Abu and Ludwig
> report to Fritz;
> >etc...
> >
> >The important thing is that the SubEntityOf column
> is kind of a foreign
> >key to the primary key EntityID, such that the tree
> can be infinitely
> >deep.
> >
> >I used to be able to do this in Oracle using:
> >
> ><CFQUERY NAME="GetEntities"
> DATASOURCE="MyDatasource">
> >     SELECT iEntityID, iSubEntityOf, sName
> >     FROM Mytable
> >     WHERE NOT iEntityID
> >     START WITH iEntityID=1
> >     CONNECT BY PRIOR iEntityID=iSubEntityOf
> ></CFQUERY>
> >
> >But I can't use these functions in SQL Server...
> >
> >Thanks!
> >
> >-Jason
> >
> >
>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/lists.cfm?link=t:4
Subscription: http://www.houseoffusion.com/lists.cfm?link=s:4
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

This list and all House of Fusion resources hosted by CFHosting.com. The place for 
dependable ColdFusion Hosting.
http://www.cfhosting.com

Reply via email to