Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите создать глобальный идентификатор...  [new]
E_u_g_e_n_E
Member

Откуда: Тверская обл., г. Кимры / Москва
Сообщений: 130
Добрый день!

Как в SQL Server сделать аналог sequence в оракл?

Надо генерировать суррогатные ID. Как сделать оптимально? В интернете полно примеров в который создается процедура, которая тупо инкрементирует поле в табличке. Использование кода выглядит как:

CREATE PROCEDURE nextval
@sequence varchar(100),
@sequence_id INT OUTPUT
AS

-- Devuelve error si no existe la secuencia
set @sequence_id = -1

UPDATE sequences
SET @sequence_id = sequence_id = sequence_id + 1
WHERE seq = @sequence

RETURN @sequence_id

--**Forma de uso:
--DECLARE @numerador int
--EXECUTE nextval 'numero', @sequence_id = @numerador OUTPUT
--print @numerador

Можно ли как нибудь делать так чтобы было

Select GET_NEXT_VAL() ...

???

Если нет, то как сделать не через хранимые процедуры, есть ли аналог rownum в Oracle?

С уважением,
Лобанов Евгений
11 авг 09, 14:05    [7522774]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
В поиск.
11 авг 09, 14:06    [7522778]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
aleks2
Guest
E_u_g_e_n_E,

Ишо один искатель...

https://www.sql.ru/forum/actualthread.aspx?tid=686113

Ты лучше задумайся: а оно тебе НАДО?
11 авг 09, 14:08    [7522788]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
E_u_g_e_n_E
есть ли аналог rownum в Oracle?
Возвращение порядковых номеров строк в результирующем наборе
11 авг 09, 14:08    [7522794]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
Glory
Member

Откуда:
Сообщений: 104760
E_u_g_e_n_E

Если нет, то как сделать не через хранимые процедуры, есть ли аналог rownum в Oracle?

А какое отношение rownum в Oracle имеет к sequence в том же Оракл ?
Вы собираетесь sequence использовать для нумерации результатов запроса что ли ?
11 авг 09, 14:13    [7522834]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
E_u_g_e_n_E
Member

Откуда: Тверская обл., г. Кимры / Москва
Сообщений: 130
Glory
E_u_g_e_n_E

Если нет, то как сделать не через хранимые процедуры, есть ли аналог rownum в Oracle?

А какое отношение rownum в Oracle имеет к sequence в том же Оракл ?
Вы собираетесь sequence использовать для нумерации результатов запроса что ли ?


Я сейчас перевожу код по загрузке ХД с Oracle на SQL Server.
Есть кусок кода по генерации сурогатных ключей (там используется sequence).

Я бы заюзал IDENT в SQL просто перед загрузкой в ХД проставляются дефолтовые записи с ID -1

вот и хотел сделать чтобы генерация ключа была контролируемой.

Про ROWNUM спросил потому что не ожидал что в SQL server это делается через row_number ower...

Хочу сделать одну табличку, которая будет содержать последнее максимальное значение,
потом буду пробегаться по данным готовым к загрузке в ХД
нумеровать строки и получать сурогатный ID как LAST_MAX_ID + ID (сгенерированный через row_number)

Я думаю так будет быстрее всего. Это так? Я просто не силен в SQL...
11 авг 09, 14:22    [7522901]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
В идентити столбец можно веть вставлять и явные значения...
11 авг 09, 14:25    [7522925]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
E_u_g_e_n_E,

колонка со свойством IDENTITY - самый правильный и надёжный способ получить суррогатный ключ с инкрементом.
Всякие там MAX+1 без эксклюзивной блокировки таблицы чреваты дублированием значений при одновременном выполнении запроса из двух и более коннектов.
11 авг 09, 14:26    [7522931]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать глобальный идентификатор...  [new]
E_u_g_e_n_E
Member

Откуда: Тверская обл., г. Кимры / Москва
Сообщений: 130
tpg
В идентити столбец можно веть вставлять и явные значения...



Мммм тогда вопрос снимается...
11 авг 09, 14:27    [7522943]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить