-
DSKalugin © (26.11.08 17:39) [0]портирую базу 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 не подходит -
clickmaker © (26.11.08 17:42) [1]INSTEAD OF INSERT, наверно
только почему не использовать identity? -
ты graph_id и ord_num синхронизовать что-ли хочешь?
А зачем, если не секрет? -
> INSTEAD OF INSERT, наверно
в общем случае не получится, если только добавлять все всегда только по одной записи. в MSSQL тригер срабатывает один на групповую вставку, а не для каждой как в IB/FB.
> только почему не использовать identity?
однозначно! -
clickmaker © (26.11.08 17:59) [4]если идентити не подходит из-за возможной дырявости, то как-то так
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 -
DSKalugin © (26.11.08 18:05) [5]> только почему не использовать identity?
последовательность должна быть сплошной, не дырявой и порядок строк имеет значение (его вручную должны будут менять/перенумеровывать) -
DSKalugin © (26.11.08 18:08) [6]похоже триггер тут вообще не поможет, придется перенумеровывать программно табличку в соответствии с тем, как юзер выстроит порядок строк
вопрос снят