![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как этот FB триггер перевести на MS SQL [MSSQL, FB1.5->MS2005]
DSKalugin © (2008-11-26 17:39:00)портирую базу firebird 1.5.5 на MS SQL 2005, с которым я плохо знаком
как этот триггер реализовать в MS?
CREATE OR ALTER TRIGGER TR_GRAPH_DETAIL_BI FOR GRAPH_DETAIL
ACTIVE BEFORE INSERT POSITION 0
as
begin
select coalesce(max(ord_num), 0)+1 from GRAPH_DETAIL
where graph_id=new.graph_id
into new.ord_num;
end
генератор для ord_num не подходит
DSKalugin (2008-11-26 18:08:00) [1]похоже триггер тут вообще не поможет, придется перенумеровывать программно табличку в соответствии с тем, как юзер выстроит порядок строк
вопрос снят
DSKalugin (2008-11-26 18:05:00) [2]> только почему не использовать identity?
последовательность должна быть сплошной, не дырявой и порядок строк имеет значение (его вручную должны будут менять/перенумеровывать)
clickmaker (2008-11-26 17:59:00) [3]если идентити не подходит из-за возможной дырявости, то как-то так
CREATE TRIGGER TR_GRAPH_DETAIL_BI ON GRAPH_DETAIL
AFTER INSERT
as
begin
declare @new_num int
select @new_num = isnull(max(ord_num), 0)+1 from GRAPH_DETAIL
where graph_id=inserted.graph_id
update inserted set ord_num = @new_num
end
sniknik (2008-11-26 17:57:00) [4]> INSTEAD OF INSERT, наверно
в общем случае не получится, если только добавлять все всегда только по одной записи. в MSSQL тригер срабатывает один на групповую вставку, а не для каждой как в IB/FB.
> только почему не использовать identity?
однозначно!
Ega23 (2008-11-26 17:54:00) [5]ты graph_id и ord_num синхронизовать что-ли хочешь?
А зачем, если не секрет?
clickmaker (2008-11-26 17:42:00) [6]INSTEAD OF INSERT, наверно
только почему не использовать identity?