sequence в sql server 2008

Wizandr
Дата: 07.02.2013 16:55:38
подскажите плиз как правильно имитировать сиквенс в 2008 версии
нужно сделать так что бы одновременно у нескольких таблиц были уникальные айдишники
iap
Дата: 07.02.2013 16:58:36
Wizandr,

может, тогда для PK сгодится UNIQUEIDENTIFIER?
DEFAULT(NEWID()) и т.д. и т.п.
Критик
Дата: 07.02.2013 16:59:49
или сделать общую таблицу уникальных id
Ennor Tiegael
Дата: 07.02.2013 17:08:21
Wizandr
Дата: 07.02.2013 17:09:49
iap
Wizandr,

может, тогда для PK сгодится UNIQUEIDENTIFIER?
DEFAULT(NEWID()) и т.д. и т.п.


важно что бы это был integer
Wizandr
Дата: 07.02.2013 17:41:47
Критик
или сделать общую таблицу уникальных id

придется так и сделать
а потом что-то типа
	INSERT INTO dbo.GlobalDocs(...) VALUES(...) 
SET @ID = SCOPE_IDENTITY();
INSERT INTO dbo.MyDoc(ID,...) VALUES(@DocID, ....) 
leov
Дата: 07.02.2013 17:43:58
Wizandr
Критик
или сделать общую таблицу уникальных id

придется так и сделать
а потом что-то типа
	INSERT INTO dbo.GlobalDocs(...) VALUES(...) 
SET @ID = SCOPE_IDENTITY();
INSERT INTO dbo.MyDoc(ID,...) VALUES(@DocID, ....) 
у меня аналогично сделано достаточно давно. работает стабильно
Мистер Хенки
Дата: 07.02.2013 17:45:05
Wizandr
подскажите плиз как правильно имитировать сиквенс в 2008 версии
нужно сделать так что бы одновременно у нескольких таблиц были уникальные айдишники

ну вот я недавно так делал
select
newID=
ROW_NUMBER() over(order by (select 1))+
				IDENT_CURRENT('table') -case when IDENT_CURRENT('table')=IDENT_SEED('table') then
               case when exists(select 1 from table) then 0
               else 1 end
            else 0 end
into #tempTable

--а потом можно с сортировкой
insert into table(id)
select newID
from #tempTable
order by newID
-- а можно SET IDENTITY_INSERT on 
-- и сделать вставку


а еще можно так попробовать, хотя я еще и не пробовал
Wizandr
Дата: 07.02.2013 17:47:45
спасибо за ответы
думаю еще можно в тригер before insert завернуть
Гость333
Дата: 07.02.2013 17:51:57
Wizandr
Критик
или сделать общую таблицу уникальных id

придется так и сделать
а потом что-то типа
	INSERT INTO dbo.GlobalDocs(...) VALUES(...) 
SET @ID = SCOPE_IDENTITY();
INSERT INTO dbo.MyDoc(ID,...) VALUES(@DocID, ....) 

А вы в эти таблицы всегда по одной записи вставляете?

Wizandr
тригер before insert

Угу, только его не существует в MSSQL...