Insert into вставляет строки куда попало

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 в запросе.
Basill
Дата: 13.09.2006 13:13:28
если необходимо задать физический порадок размещения записей, можно создать кластерный индекс - он именно для этого и предназначен
RENaissance
Дата: 13.09.2006 13:18:51

Basill

если необходимо задать физический порадок размещения записей, можно создать кластерный индекс - он именно для этого и предназначен

Это не гарантирует, что записи будут выбраны из таблицы в отсортированном порядке. Только явное указание ORDER BY поможет.


Posted via ActualForum NNTP Server 1.3

pavel73
Дата: 13.09.2006 13:20:32
Zyris
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) вставляет данные куда попало, хотелось бы чтобы строки вставлялись всегда в конец таблицы.

Как такое можно сделать???


Для чего в вашем случае это необходимо?
Владимор Конев
Дата: 13.09.2006 13:40:12
Basill
если необходимо задать физический порадок размещения записей, можно создать кластерный индекс - он именно для этого и предназначен
Физический ли? Или таки логический?
Nik V. Polonski
Дата: 13.09.2006 14:04:03
BOL

Using Clustered Indexes
A clustered index determines the physical order of data in a table.
Basill
Дата: 13.09.2006 14:12:56
RENaissance

Basill

если необходимо задать физический порядок размещения записей, можно создать кластерный индекс - он именно для этого и предназначен

Это не гарантирует, что записи будут выбраны из таблицы в отсортированном порядке. Только явное указание ORDER BY поможет.


Posted via ActualForum NNTP Server 1.3


вопрос был :
команда INSERT INTO #tmp VALUES (@current,@Name) вставляет данные куда попало, хотелось бы чтобы строки вставлялись всегда в конец таблицы.

ессно при выборке нужно порядок ручками задавать
Владимор Конев
Дата: 14.09.2006 05:07:46
Nik V. Polonski
BOL

Using Clustered Indexes
A clustered index determines the physical order of data in a table.
BOL на помойку. Автору ответа - незачет.