После триггера INSERT / UPDATE, влияющего на вставленные строки - PullRequest
0 голосов
/ 07 июня 2018

Предыстория: у меня есть таблица в базе данных MS SQL, в которой перечислены компании и связанные с ними поставщики, а также их даты и даты.В каждой компании должен быть только один активный поставщик за один раз.

Структура таблицы следующая:

_sRID    DataAreaID      Supplier     ApplicableFrom     ApplicableTo
1        Comp1           Supplier1    2018-06-01         (NULL)
2        Comp2           Supplier2    2018-06-01         (NULL)
3        Comp3           Supplier3    2018-06-01         (NULL)

Где _sRID - это идентификатор.

Мой триггерэто так;

   ALTER TRIGGER [trans].[ICOSupplierIDs_AutoEnd]
   ON  [trans].[ICOSupplierIDs]
   AFTER INSERT,UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    update base
    set    base.ApplicableTo = Getdate()
    from   trans.ICOSupplierIDs as base
    join   inserted as ins on ins.DataAreaID = base.DataAreaID
    where  base.ApplicableTo is null
    and    base._sRID != (select max(_sRID) from trans.ICOSupplierIDs where DataAreaID = ins.DataAreaID);

END

Таким образом, после вставки в таблицу для "comp1" таблица выглядит следующим образом:

_sRID    DataAreaID      Supplier     ApplicableFrom     ApplicableTo
1        Comp1           Supplier1    2018-06-01         2018-06-07
2        Comp2           Supplier2    2018-06-01         (NULL)
3        Comp3           Supplier3    2018-06-01         (NULL)
4        Comp1           Supplierx    2018-06-07         (NULL)

Есть ли более чистый способ сделать это, чем запрос концамаксимальной идентичности и снова ударить по столу?

TIA

...