Конференция "Базы" » как этот FB триггер перевести на MS SQL [MSSQL, FB1.5->MS2005]
 
  • 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?
  • Ega23 © (26.11.08 17:54) [2]
    ты graph_id и ord_num синхронизовать что-ли хочешь?
    А зачем, если не секрет?
  • sniknik © (26.11.08 17:57) [3]
    > 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]
    похоже триггер тут вообще не поможет, придется перенумеровывать программно табличку в соответствии с тем, как  юзер выстроит порядок строк
    вопрос снят
 
Конференция "Базы" » как этот FB триггер перевести на MS SQL [MSSQL, FB1.5->MS2005]
Есть новые Нет новых   [134477   +39][b:0][p:0.001]