Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
DBAshnik Member Откуда: Сообщений: 410 |
Прежде всего 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] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8730 |
А почему триггер? Чем дефолт не устраивает? |
||
18 мар 19, 19:40 [21836489] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
DBAshnik, SELECT из update уберите и будет работать |
18 мар 19, 20:38 [21836563] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||
18 мар 19, 21:21 [21836606] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
DBAshnik, Sequence же ! |
19 мар 19, 10:35 [21836940] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
|
||
19 мар 19, 10:37 [21836948] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
DBAshnik, тормознее будет. Вам нужен не триггер, а дефолт. |
19 мар 19, 13:50 [21837308] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
дело только в этом! Во первых это громоздко, (полей очень много, как сказал.), да и а потом при добавлении новых полей в таблицу, придётся каждый раз не забывать дополнить ими триггер! :-( |
||||
19 мар 19, 18:29 [21837660] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
ээээ, а как конкретно? Нельзя ли кусок кода, плиз? Да и потом это нужно будет завязать на массив inserted (чтоб не проходить по таблице каждый раз.) Может быть неизбежно придётся открывать курсор? (или есть как то по-элегантнее?) (плиз не в обиду, коллеги, но после ораклa читая инфу по MS-SQL мне не отделаться от чувства, что пересаживаюсь с мерса на жигули! ;-) Может по незнанию, пока? ) |
||
19 мар 19, 18:33 [21837666] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
ну да, Sequence разумеется, и эту возможность наше начальство "забанило", вопрос закрыт то есть, сорри! :-( |
||||
19 мар 19, 18:35 [21837667] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Ну вот оно и получается хуже У MSSQL другая идеология, более современная, он всё таки появился позже оракла, и бальше отошёл от кобола и файловых БД. Поэтому там нет позывов в любой вычислении использовать курсор, циклы, триггер на строку и т.д. Там оперируют множествами целиком, на языке SQL.
Т.е. обновляете поле id в таблице mytbl, джойня её с таблицей inserted Ещё одна тонкость в том, что для джойна нужно идентифицировать запись - надеюсь, id - это не PK? :-) Неважно, курсором, или джойном, в общем, как угодно, но в любом случае вы либо каждый раз сканируете всю таблицу, либо обеспечиваете возможность указать нужные записи, то есть делаете для этого уникальное поле. Можно для этого, например, сделать дополнительное поле identity
|
||||||
19 мар 19, 22:05 [21837811] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
так в этом то все и "гвозди", что id это PK ;-) Я ж и топик так назвал: "в оракловском стиле" ))) |
||
20 мар 19, 11:40 [21838237] Ответить | Цитировать Сообщить модератору |
DBAshnik Member Откуда: Сообщений: 410 |
я плохо сформулировал, сорри. Забанило возможность использования нормальной IDENTITY. (т.е. автоинкрементного id/pk) |
||||
20 мар 19, 11:42 [21838240] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
нельзя сказать что это не правильно, хотя "глобально запрещать" в любом случае нелогично |
||||
20 мар 19, 11:46 [21838246] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Но это если необязательно делать в триггере. |
||||
20 мар 19, 21:59 [21838978] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |