Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
Прежде всего 2 факта:
- c Ораклом работаю много лет
- про autoincrement-поля я знаю!!! (но у нас НЕ ХОТЯТ их использовать!)

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

...
update ...
 SET mytbl.id = ISNULL( mytbl.id, ( select NEXT VALUE for my_seq_1 ) )
where .
...

есть ли у кого готовый примерчик. В гугле нахожу только INSTEAD OF варианты. Но в этой таблицы гигантское количество колонок. Не хотелось бы их всех в триггере перечислять! :-( Можно как то по-элегантнее!?
18 мар 19, 19:39    [21836486]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
msLex
Member

Откуда:
Сообщений: 6278
DBAshnik
Прежде всего 2 факта:
- c Ораклом работаю много лет
- про autoincrement-поля я знаю!!! (но у нас НЕ ХОТЯТ их использовать!)

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

...
update ...
 SET mytbl.id = ISNULL( mytbl.id, ( select NEXT VALUE for my_seq_1 ) )
where .
...


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



А почему триггер?
Чем дефолт не устраивает?
18 мар 19, 19:40    [21836489]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2395
DBAshnik,

SELECT из update уберите и будет работать
18 мар 19, 20:38    [21836563]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28735
WarAnt
DBAshnik,

SELECT из update уберите и будет работать
Но, за нежелание перетащить мышкой список полей, придётся заплатить замедлением вставки в таблицу.
18 мар 19, 21:21    [21836606]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
court
Member

Откуда:
Сообщений: 1740
DBAshnik,

Sequence же !
19 мар 19, 10:35    [21836940]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
court
Member

Откуда:
Сообщений: 1740
DBAshnik
из секвенции по типу
аа, "секвенции" это видимо и есть Sequence "по-ораколовски" :)
19 мар 19, 10:37    [21836948]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6536
DBAshnik,

тормознее будет. Вам нужен не триггер, а дефолт.
19 мар 19, 13:50    [21837308]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
alexeyvg
WarAnt
DBAshnik,

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


дело только в этом! Во первых это громоздко, (полей очень много, как сказал.), да и а потом при добавлении новых полей в таблицу, придётся каждый раз не забывать дополнить ими триггер! :-(
19 мар 19, 18:29    [21837660]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
WarAnt
DBAshnik,

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


ээээ, а как конкретно? Нельзя ли кусок кода, плиз? Да и потом это нужно будет завязать на массив inserted (чтоб не проходить по таблице каждый раз.) Может быть неизбежно придётся открывать курсор? (или есть как то по-элегантнее?) (плиз не в обиду, коллеги, но после ораклa читая инфу по MS-SQL мне не отделаться от чувства, что пересаживаюсь с мерса на жигули! ;-) Может по незнанию, пока? )
19 мар 19, 18:33    [21837666]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
court
DBAshnik
из секвенции по типу
аа, "секвенции" это видимо и есть Sequence "по-ораколовски" :)


ну да, Sequence разумеется, и эту возможность наше начальство "забанило", вопрос закрыт то есть, сорри! :-(
19 мар 19, 18:35    [21837667]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28735
DBAshnik
после ораклa читая инфу по MS-SQL мне не отделаться от чувства, что пересаживаюсь с мерса на жигули! ;-) Может по незнанию, пока? )
Да, по незнанию; у вашего начальства идея "сделать на MSSQL как в оракле, только хуже".
Ну вот оно и получается хуже
У MSSQL другая идеология, более современная, он всё таки появился позже оракла, и бальше отошёл от кобола и файловых БД. Поэтому там нет позывов в любой вычислении использовать курсор, циклы, триггер на строку и т.д. Там оперируют множествами целиком, на языке SQL.
DBAshnik
Да и потом это нужно будет завязать на массив inserted (чтоб не проходить по таблице каждый раз.) Может быть неизбежно придётся открывать курсор? (или есть как то по-элегантнее?)
Вообще 2 множества цепляются друг с другом оператором JOIN :-)

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

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

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

DBAshnik
ну да, Sequence разумеется, и эту возможность наше начальство "забанило"
Чего? Изначально же задача стоит в том, что бы вместо нормальной IDENTITY использовать Sequence, как в оракле???
19 мар 19, 22:05    [21837811]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
alexeyvg

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


так в этом то все и "гвозди", что id это PK ;-)
Я ж и топик так назвал: "в оракловском стиле" )))
20 мар 19, 11:40    [21838237]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
DBAshnik
Member

Откуда:
Сообщений: 302
alexeyvg


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


я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)
20 мар 19, 11:42    [21838240]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6378
DBAshnik
alexeyvg


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


я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)

нельзя сказать что это не правильно, хотя "глобально запрещать" в любом случае нелогично
20 мар 19, 11:46    [21838246]     Ответить | Цитировать Сообщить модератору
 Re: триггер заполняющий id (primary key) в оракловском стиле?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28735
DBAshnik
так в этом то все и "гвозди", что id это PK ;-)
Тогда, если обязательно в триггере, то это должен быть триггер instead of insert, и придётся перечислять все поля (или делать динамику, что вообще абсурд).
DBAshnik
я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk)
Можно сделать сиквенс в default

Но это если необязательно делать в триггере.
20 мар 19, 21:59    [21838978]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить