|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Tengiz Kharatishvili 2:5020/400 08 Jun 2001 06:53:46 To : All Subject : Re: Informix ? -------------------------------------------------------------------------------- "Fedor 'Cruger' Tersin" <Fedor.\'Cruger\'.Tersin@p139.f794.n5020.z2.fidonet.org> wrote in message news:2211448725@p139.f794.n5020.z2.ftn... > Ты вырезал полезную штуку: > > TK> return coalesce((select max(pk) from x), 0) + 1 > >Hадо думать, там же еще новых записей нет. > Именно поэтому значения там и совпадают, разве нет? Ведь сначала готовится > пачка записей, при этом вычисляются дефаултные значения, и только потом она > вставляется в таблицу. Поэтому запрос работает на немодифицированной таблице, > там неоткуда взяться новым значениям. > Пардон, я неправильно понял исходную реплику. И, согласен, пример с ошибкой. Хотя проблема была несколько глубже, чем просто немодифицированная таблица. Мне следовало бы уточнить, что изменилось перед окончательным выходом 2000 со времён не помню уже какой беты, однако там дело обстояло именно так: перед выполнением пачки вставок значения по умолчанию вычислялись один раз на пачку, соответственно это для генерации ключей не годилось. Hа что я и пытался обратить внимание публики. К моему удивлению, в релизе 2000 это уже оказалось не так. Вот ещё один маленький и предельно упрощённый эксперимент, который показывает, теперь для генерации ключей функции, подвязанные к defaults, вполне можно использовать: use tempdb go drop table pk drop table x drop function dbo.seq go create table pk (pk int) insert pk values(0) go create function seq() returns int as begin exec master..xp_cmdshell 'osql -E -Q"update tempdb..pk set pk = pk + 1"' return (select pk from pk) end go create table x ( pk int default(dbo.seq()), data char(1) ) go insert x (data) select 'A' union all select 'B' union all select 'C' select * from x ============= (1 row(s) affected) (3 row(s) affected) pk data ----------- ---- 1 A 2 B 3 C (3 row(s) affected) Спасибо, Fedor 'Cruger' Tersin, за замечание. Cheers. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/6577672908f3.html, оценка из 5, голосов 10
|