Zyris
Дата: 13.09.2006 13:10:06
DECLARE @Name char(50)
DECLARE @current char(9)
DECLARE @level int
SET @current=' 0 '
SET @level=1
SET NOCOUNT ON
drop table #tmp
CREATE TABLE #tmp (id char(9),descr char(50))
drop table #stack
CREATE TABLE #stack (item char(9), level int,descr char(50))
INSERT INTO #stack
SELECT ID, @level, descr
FROM SC84
WHERE (parentID = @current) and (ismark=0) order by isfolder desc,descr desc
WHILE @level > 0
BEGIN
IF EXISTS (SELECT * FROM #stack WHERE level = @level)
BEGIN
SELECT @current = item, @Name=descr
FROM #stack
WHERE level = @level
INSERT INTO #tmp VALUES (@current,@Name)
DELETE FROM #stack
WHERE level = @level
AND item = @current
INSERT #stack
SELECT ID, @level + 1, descr
FROM SC84
WHERE (parentID = @current) and (ismark=0) order by isfolder desc,descr desc
IF @@ROWCOUNT > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END -- WHILE
select * from #tmp
Так вот суть проблемы вот в чем команда INSERT INTO #tmp VALUES (@current,@Name) вставляет данные куда попало, хотелось бы чтобы строки вставлялись всегда в конец таблицы.
Как такое можно сделать???
GreenSunrise
Дата: 13.09.2006 13:11:37
Нет такого понятия в сиквеле - конец таблицы. Куда вставлять данные физически, определяется самим сиквелом. А вы, если хотите получать данные в правильном порядке, задавайте этот данный порядок явно с помощью опции ORDER BY в запросе.