Как в 2000 написать аналог RowNumber()

nerv
Дата: 02.02.2013 10:04:05
К примеру такой запрос с нумерацией строк:
DECLARE @i int
SET @i =5
SELECT  @i+ROW_NUMBER() OVER(ORDER BY vi.Iss_id, vi.Vr_id), vi.Iss_id, vi.Vr_id, vi.zv
 FROM VrIss vi
  where vi.zv =1

Хотелось бы иметь совместимость с MS SQL 2000. Как мне в этом случае этот запрос переписать?
aleks2
Дата: 02.02.2013 10:06:56
1. Вставка в табличную переменную с identity.
2. Потом выборка из табличной переменной.
nerv
Дата: 02.02.2013 10:15:13
aleks2,
то есть создать временную таблицу, у которой есть identity и выборка из нее.
Спасибо за решение.
invm
Дата: 02.02.2013 10:17:34
select
 identity(int, 6, 1) as n, vi.Iss_id, vi.Vr_id, vi.zv
into
 #t
from
 VrIss vi
where
 vi.zv = 1
order by
 vi.Iss_id, vi.Vr_id;

select * from #t;
Добрый Э - Эх
Дата: 02.02.2013 13:26:07
nerv,

R.T.F.F.A.Q. - Возвращение порядковых номеров строк в результирующем наборе
nerv
Дата: 03.02.2013 19:42:25
Добрый Э - Эх,
благодарю! Столько способов!
nerv
Дата: 03.02.2013 22:59:42
Кстати, а так уже не работает:
DECLARE @i int
SET @i =5
select
 identity(int, @i, 1) as n, vi.Iss_id, vi.Vr_id, vi.zv
into
 #t
...
nerv
Дата: 03.02.2013 23:43:40
invm, Второй раз заппустить запрос не получится, пишет, что #t уже существует.
Эта #t создается в памяти, в sysobjects ее нет, поэтому

if exists (select * from sysobjects where type = 'U' and  name = '#t')
begin
	drop table #t
end


не работает. А как проверить существует ли #t в памяти?
alexeyvg
Дата: 04.02.2013 00:07:52
nerv
invm, Второй раз заппустить запрос не получится, пишет, что #t уже существует.
Эта #t создается в памяти, в sysobjects ее нет, поэтому
if exists (select * from sysobjects where type = 'U' and  name = '#t')
begin
	drop table #t
end

не работает. А как проверить существует ли #t в памяти?
Вместо
if exists (select * from sysobjects where type = 'U' and  name = '#t')

напишите
if object_id('#t') is not null
invm
Дата: 04.02.2013 00:12:47
nerv
Эта #t создается в памяти, в sysobjects ее нет
#t создается в tempdb.
declare @i int;

set @i = 5;

if object_id('tempdb..#t', 'U') is not null
 drop table #t;
 
select
 identity(int, 1, 1) as n, vi.Iss_id, vi.Vr_id, vi.zv
into
 #t
from
 VrIss vi
where
 vi.zv = 1
order by
 vi.Iss_id, vi.Vr_id;

select n + @i as n, Iss_id, Vr_id, zv from #t;