2013-04-12 7 views
-2

У меня есть таблица фильмов с идентификаторами столбцов, заголовком, инвентарем, и я добавил столбец rent_count. Я нашел решения онлайн, чтобы увеличить рентабельность аренды после обновления строки, но можно ли увеличить счет аренды только тогда, когда инвентарь будет уменьшаться (когда кто-то арендует что-то)?sql server trigger для увеличения столбца при уменьшении другого столбца

+4

Как обновить столбец «inventory»? Не можете ли вы обновить оба столбца в одном и том же фрагменте кода? например: вычесть 1 из инвентаря, добавить 1 к аренде? – Marian

ответ

1
Create trigger trigUpdateRentalCount 
    On Movies for Update 
    As 
     if Exists(Select * from inserted I 
         Join deleted d 
          On d.pk = i.pk 
        Where i.inventory = d.inventory - 1) 

      Update m Set rental_count += 1 
      From Movies m 
       join (inserted i Join deleted d 
         on i.pk = d.Pk 
          and i.inventory = d.inventory - 1) 
        on i.PK = m.PK 

EDIT для объяснения триггера. В любом триггере пользователь имеет доступ к набору строк, удаляемых или обновляемых (со старыми значениями) оператором sql, который вызвал срабатывание триггера. Доступ к этому набору можно получить, используя ключевое слово deleted.

Он также имеет доступ ко всем строкам, которые вставлены или обновлены (с новыми обновленными значениями), используя ключевое слово inserted.

Так что, если в удаленной таблице есть строки, которые соответствуют строке во вставленной таблице, где новое вставленное значение для инвентаря меньше, чем старое значение, то для каждой такой строки вы хотите обновить (приращение) поля rental_count.

Триггер полагается на оператор If Exists, чтобы определить, существуют ли такие строки в вставленном и удаленном состоянии. Затем, если они есть, он увеличивает значение rental_count в соответствующей строке в таблице «Фильмы».

+0

Я не спускал его вниз ... все еще играл с твоим ответом. SQL-триггеры сложнее, чем я думал. Спасибо за помощь. – user2275848

+2

У меня нет времени проверить этот триггер, похоже, он работает. Но @ user2275848, для чего вам нужен триггер? Почему у вас нет хранимой процедуры для обновления таблицы (когда кто-то арендует что-то)? –

+0

Не было dv, но я считаю, что вы должны объяснить код. Кодовые ответы не очень понятны (как уже упоминалось в ОП). – Marian