Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / триггер заполняющий id (primary key) в оракловском стиле? / 15 сообщений из 15, страница 1 из 1
18.03.2019, 19:39
    #39788036
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
Прежде всего 2 факта:
- c Ораклом работаю много лет
- про autoincrement-поля я знаю!!! (но у нас НЕ ХОТЯТ их использовать!)

нужет insert-триггер заполняющий id из секвенции по типу

Код: sql
1.
2.
3.
4.
5.
...
update ...
 SET mytbl.id = ISNULL( mytbl.id, ( select NEXT VALUE for my_seq_1 ) )
where .
...


есть ли у кого готовый примерчик. В гугле нахожу только INSTEAD OF варианты. Но в этой таблицы гигантское количество колонок. Не хотелось бы их всех в триггере перечислять! :-( Можно как то по-элегантнее!?
...
Рейтинг: 0 / 0
18.03.2019, 19:40
    #39788038
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnikПрежде всего 2 факта:
- c Ораклом работаю много лет
- про autoincrement-поля я знаю!!! (но у нас НЕ ХОТЯТ их использовать!)

нужет insert-триггер заполняющий id из секвенции по типу

Код: sql
1.
2.
3.
4.
5.
...
update ...
 SET mytbl.id = ISNULL( mytbl.id, ( select NEXT VALUE for my_seq_1 ) )
where .
...



есть ли у кого готовый примерчик. В гугле нахожу только INSTEAD OF варианты. Но в этой таблицы гигантское количество колонок. Не хотелось бы их всех в триггере перечислять! :-( Можно как то по-элегантнее!?


А почему триггер?
Чем дефолт не устраивает?
...
Рейтинг: 0 / 0
18.03.2019, 20:38
    #39788073
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnik,

SELECT из update уберите и будет работать
...
Рейтинг: 0 / 0
18.03.2019, 21:21
    #39788091
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
WarAntDBAshnik,

SELECT из update уберите и будет работатьНо, за нежелание перетащить мышкой список полей, придётся заплатить замедлением вставки в таблицу.
...
Рейтинг: 0 / 0
19.03.2019, 10:35
    #39788224
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnik,

Sequence же !
...
Рейтинг: 0 / 0
19.03.2019, 10:37
    #39788229
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnikиз секвенции по типуаа, "секвенции" это видимо и есть Sequence "по-ораколовски" :)
...
Рейтинг: 0 / 0
19.03.2019, 13:50
    #39788413
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnik,

тормознее будет. Вам нужен не триггер, а дефолт.
...
Рейтинг: 0 / 0
19.03.2019, 18:29
    #39788594
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
alexeyvgWarAntDBAshnik,

SELECT из update уберите и будет работатьНо, за нежелание перетащить мышкой список полей, придётся заплатить замедлением вставки в таблицу.

дело только в этом! Во первых это громоздко, (полей очень много, как сказал.), да и а потом при добавлении новых полей в таблицу, придётся каждый раз не забывать дополнить ими триггер! :-(
...
Рейтинг: 0 / 0
19.03.2019, 18:33
    #39788596
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
WarAntDBAshnik,

SELECT из update уберите и будет работать

ээээ, а как конкретно? Нельзя ли кусок кода, плиз? Да и потом это нужно будет завязать на массив inserted (чтоб не проходить по таблице каждый раз.) Может быть неизбежно придётся открывать курсор? (или есть как то по-элегантнее?) (плиз не в обиду, коллеги, но после ораклa читая инфу по MS-SQL мне не отделаться от чувства, что пересаживаюсь с мерса на жигули! ;-) Может по незнанию, пока? )
...
Рейтинг: 0 / 0
19.03.2019, 18:35
    #39788597
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
courtDBAshnikиз секвенции по типуаа, "секвенции" это видимо и есть Sequence "по-ораколовски" :)

ну да, Sequence разумеется, и эту возможность наше начальство "забанило", вопрос закрыт то есть, сорри! :-(
...
Рейтинг: 0 / 0
19.03.2019, 22:05
    #39788681
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnikпосле ораклa читая инфу по MS-SQL мне не отделаться от чувства, что пересаживаюсь с мерса на жигули! ;-) Может по незнанию, пока? )Да, по незнанию; у вашего начальства идея "сделать на MSSQL как в оракле, только хуже".
Ну вот оно и получается хуже
У MSSQL другая идеология, более современная, он всё таки появился позже оракла, и бальше отошёл от кобола и файловых БД. Поэтому там нет позывов в любой вычислении использовать курсор, циклы, триггер на строку и т.д. Там оперируют множествами целиком, на языке SQL.
DBAshnikДа и потом это нужно будет завязать на массив inserted (чтоб не проходить по таблице каждый раз.) Может быть неизбежно придётся открывать курсор? (или есть как то по-элегантнее?)Вообще 2 множества цепляются друг с другом оператором JOIN :-)

Т.е. обновляете поле id в таблице mytbl, джойня её с таблицей inserted

Ещё одна тонкость в том, что для джойна нужно идентифицировать запись - надеюсь, id - это не PK? :-)

Неважно, курсором, или джойном, в общем, как угодно, но в любом случае вы либо каждый раз сканируете всю таблицу, либо обеспечиваете возможность указать нужные записи, то есть делаете для этого уникальное поле.
Можно для этого, например, сделать дополнительное поле identity

DBAshnikну да, Sequence разумеется, и эту возможность наше начальство " забанило "Чего? Изначально же задача стоит в том, что бы вместо нормальной IDENTITY использовать Sequence, как в оракле???
...
Рейтинг: 0 / 0
20.03.2019, 11:40
    #39788905
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
alexeyvg
Ещё одна тонкость в том, что для джойна нужно идентифицировать запись - надеюсь, id - это не PK? :-)

так в этом то все и "гвозди", что id это PK ;-)
Я ж и топик так назвал: "в оракловском стиле" )))
...
Рейтинг: 0 / 0
20.03.2019, 11:42
    #39788907
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
alexeyvg

DBAshnikну да, Sequence разумеется, и эту возможность наше начальство " забанило "Чего? Изначально же задача стоит в том, что бы вместо нормальной IDENTITY использовать Sequence, как в оракле???

я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)
...
Рейтинг: 0 / 0
20.03.2019, 11:46
    #39788910
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnikalexeyvg

пропущено...
Чего? Изначально же задача стоит в том, что бы вместо нормальной IDENTITY использовать Sequence, как в оракле???

я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)
нельзя сказать что это не правильно, хотя "глобально запрещать" в любом случае нелогично
...
Рейтинг: 0 / 0
20.03.2019, 21:59
    #39789271
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер заполняющий id (primary key) в оракловском стиле?
DBAshnikтак в этом то все и "гвозди", что id это PK ;-)Тогда, если обязательно в триггере, то это должен быть триггер instead of insert, и придётся перечислять все поля (или делать динамику, что вообще абсурд).
DBAshnikя плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)Можно сделать сиквенс в default

Но это если необязательно делать в триггере.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / триггер заполняющий id (primary key) в оракловском стиле? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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