powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
10 сообщений из 10, страница 1 из 1
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904203
soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как генераторов там я не нашел, вер. 9.02.

Хотя оно особо не нужно, так как данные вносятся в базу с одного места, а остальные только просматривают их, но все таки как правильно поступать с этим сервером?
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904208
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо искал. Открывай BOL и ищи по словам:
1) default autoincrement
2) newid()


---
http://www.rusug.ru] Портал рускоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904238
soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автоинкремент не подойдет у меня и 4НФ есть. Так что я должен получить id и подставить его в другой кортеж связанный с заданным.

А NEWID() возвращает какую-то срамоту, типа такой NEWID(*)
0x03f2052a0d444c229768ff52d8258283


Ладно, будет пока maxid+1
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904252
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softТак как генераторов там я не нашел, вер. 9.02.
А с каких х#$в они должны там быть ;)?

все таки как правильно поступать с этим сервером?
Использовать autoincrement или GET_IDENTITY().
____________________________________
- Гарфилд, мышь!
- Спасибо, я сыт!
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904255
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softАвтоинкремент не подойдет у меня и 4НФ есть. Так что я должен получить id и подставить его в другой кортеж связанный с заданным.
А теперь переведи эту заумь на русский язык .

А NEWID() возвращает какую-то срамоту, типа такой NEWID(*)
0x03f2052a0d444c229768ff52d8258283
Ты BOL начнёшь читать, или где? NEWID() возвращает GUID.

Ладно, будет пока maxid+1
Хреновое решение...
____________________________________
- Гарфилд, мышь!
- Спасибо, я сыт!
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904279
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softЛадно, будет пока maxid+1
Да будет так ... до первого "Primary key for table is not unique", а то и DEADLOCK
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33904311
soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>GET_IDENTITY()

То что доктор прописал...

Да, в ASA генераторы сделаны правильно, генерация ведется не по левой переменной-генератору и по значению связанному с ключевым полем базы.

А то newid()...newid()... тху.
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33905131
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS wrote:

> Да будет так ... до первого "Primary key for table is not unique", а то
> и DEADLOCK

Каждый сам себе злобный Буратино .
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33906594
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softАвтоинкремент не подойдет у меня и 4НФ есть. Так что я должен получить id и подставить его в другой кортеж связанный с заданным.

И в чем проблема? В корневой таблице пусть генерится по default (global) autoincrement, а в "наследнике" вставляется полученное значение. У меня подобное сделано элементарно - хранимая функция получения ID вызывается в таблице-наследнике в триггере before insert. А сама функция при вызове делает вставку в мастер-таблицу и получает вставленный ID через @@identity.
Получается практически то же самое, что и наследование в PostgreSQL. Для полноты картины наследнику нужно только добавить триггер after delete для чистки базовой таблицы.

А грубый аналог любимых IB-генераторов, если уж без них непривычно, очень легко сделать самому:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE dba.generators(
  gen_name varchar( 254 ) not null,
  avalue integer not null default  0 ,
PRIMARY KEY(gen_name)
);

ALTER FUNCTION "dba"."gen_id"(in @aname varchar( 254 ),in step integer)
returns integer
begin
  declare @result integer;
  if not exists(select * from dba.generators where gen_name = @aname) then
    insert into dba.generators( gen_name,avalue) values( @aname, 0 ) 
  end if;
  update dba.generators set avalue = avalue+step where gen_name = @aname;
  set @result=(select avalue from dba.generators where gen_name = @aname);
  return(@result)
end
Такой генератор, конечно, отличается от интербейзовского тем, что он транзакционный, но при миграции иногда может несколько упростить жизнь.
Где-то приводился более навороченный вариант с автоматической генерацией фейковых таблиц для identity, но это уж совсем для зверских извратов
...
Рейтинг: 0 / 0
В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
    #33906599
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
soft>>GET_IDENTITY()

То что доктор прописал...

Да, в ASA генераторы сделаны правильно, генерация ведется не по левой переменной-генератору и по значению связанному с ключевым полем базы.

Вот именно. Это то, о чем часто твердят не только на этом форуме: если переходишь на другой сервер, лучше обрисовать более общую задачу, которую хочешь решить, чем искать полный аналог использовавшегося ранее инструмента. Часто можно найти средства лучше. Например identity (default autoincrement) в отличие от генератора учтет значения, которые "вручную" вставлялись в таблицу, а global autoincrement к тому же еще позволит распределить генерируемые значения по диапазонам, что удобно например в распределенных системах с несколькими БД.
--


Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / В ASA для кроме Max(id)+1 есть механизм генерации первичного ключа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]