Номерация строк

NetMinion
Дата: 15.01.2001 16:46:30
Запрос:
INSERT INTO Table VALUES ((SELECT MAX ID FROM Table) + 1,'Information') или что то в это м роде...
Как заставить этот запрос работать?

ПОМОГИТЕ ПЛЗ)
SergSuper
Дата: 15.01.2001 17:02:18
Ну такой-то запрос работать не заставить

Надо немного попроще просто написать

create table #table(ID int, inf varchar(200))
insert #table values(0, 'empty')

INSERT INTO #table SELECT MAX(ID)+1,'Information' FROM #table

select * from #table

А я сообще обычно values не пишу. Вместо
insert #table values(0, 'empty')
можно написать
insert #table select 0, 'empty'
NetMinion
Дата: 15.01.2001 17:38:27
Спасибо Серж
TolSh
Дата: 16.01.2001 05:05:22
Способ нумерации строк предложенный SergSuper интересен , только вот не лишен некоторых неудобств в использовании. Скажем если в таблице полей 30 , а на данном этапе нужно заполнить только 5(все остальные заполняются default) - как тогда написать Insert ?
SergSuper
Дата: 16.01.2001 11:27:26
"Марксизм - это не догма, а руководство к действию"
В.И.Ленин

Это я к тому: идея дадена - а вы уж как-нибудь развивайте сами.
По 5 записей так конечно не вставишь. Но...
1. А не проще ли использовать IDENTITY ?
2. Если IDENTITY действительно не подходит(допустим нужно что бы была нумерация без "дырок", а с IDENTITY они при удалении записей появяться) то наверное можно придумать обходные варианты. Например вставлять какое-нибудь предопределённое значение (например "-1" или "null"), а потом в цикле их апдейтить. Это можно делать в триггере. Тут реализация зависит уже от конкретной задачи.
3. А подумайте - может вам нумерация и вообще не нужна?

С приветом Сергей
sergsuper@mail.ru
Garya
Дата: 18.01.2001 20:50:30
Идея не моя. Получил по рассылки с сайта citycat.ru (MS SQL SERVER - дело тонкое).
declare @I int
set @I=0
update Table set ID=@I=@I+1
В BOL такого синтаксиса я не нашел. Попробовал - работает!
Нумерует записи, правда те, которые уже имеются в таблице. Успехов.
SergSuper
Дата: 19.01.2001 10:34:37
2 Garya - всё-таки попробуй - не работает же

Правильно писать:
declare @I int
set @I=0
update Table set @I=ID=@I+1

Хотя я обычно писал:
declare @I int
set @I=0
update Table set ID=@I, @I=@I+1

Хотя пронумеровать записи в таблице - задача весьма тривиальная, здесь же вопрос стоял в другом: как вставлять записи так, что бы они были уже пронумерованы.
NetMinion
Дата: 20.01.2001 03:52:19
Спасибо всем, кто пытался ответить на этот вопрос)
на самом деле я просто слишком упростил задачу,
тем самым усложнив решение...
выход из моей ситуации таков:

SELECT IDENTITY(INT, 1, 1) as RowId, OldTable.tbl1
Into NewTable
From OldTable

правда тут возникает еще одна задача -
если tbl1 указан как IDENTITY то запрос вадаст ошибку...
(немогу вставить 2 IDENTITY) что-то вроде того...
а у меня именно такая ситуация...
AnKa
Дата: 20.01.2001 14:47:13
Я вижу здесь два выхода (оба проверены - работают, самому надо было ).
1. Отбирать во временную таблицу #Tmp1 все столбцы из Tab1 кроме столбца IDENTITY.
2. Если нужен и "новый" номер строки и "старый", тогда:
SELECT IDENTITY(int, 1, 1) as NewID, OldID=CAST(t.ID as int), t.Field1, t.Field2
INTO #Tmp1
FROM Tab1 t

Желаю удачи!
NetMinion
Дата: 20.01.2001 16:32:02
AnKa ты опять меня спосла)
я твой должник)))
спасибо..