Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Триггер - что не так написал?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
Пример из BOL
CREATE TRIGGER NewPODetail
ON Purchasing.PurchaseOrderDetail
AFTER INSERT AS
   UPDATE PurchaseOrderHeader
   SET SubTotal = SubTotal + LineTotal
   FROM inserted
   WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID


Мой текст:
CREATE TRIGGER [dbo].[TR_WareSupply_IU] ON [dbo].[WareSupply]
AFTER INSERT, UPDATE
AS
BEGIN
  update WareSupply
  set JournalDocKind = case 
                         when IsSupply = 1 and IsExternal = 1 then 4 
                         when IsSupply = 0 and IsExternal = 1 then 5 
                         .....
                       end  
  from inserted I 
  where I.OpID = WareSupply.OpID 
END
GO


Куча ошибок типа "Неоднозначное имя столбца "IsSupply""
Что-то я принципиальных отличий не вижу в субботу вечером Ткнине, где косяк???
31 янв 15, 18:13    [17201083]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
minva,
попутно вопрос, можно ли на WareSupply алиас прицепить, чтоб покороче писать в Case?
31 янв 15, 18:17    [17201092]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
CREATE TRIGGER [dbo].[TR_WareSupply_IU] ON [dbo].[WareSupply]
AFTER INSERT, UPDATE
AS
BEGIN
  update WareSupply
  set JournalDocKind = case 
                         when I.IsSupply = 1 and I.IsExternal = 1 then 4 
                         when I.IsSupply = 0 and I.IsExternal = 1 then 5 
                         .....
                       end  
  from inserted I 
  where I.OpID = WareSupply.OpID 
END
GO
31 янв 15, 18:17    [17201094]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
daw, да я источник ошибки понимаю :)
Я не понимаю в чем разница В БОЛе косяк?
31 янв 15, 18:20    [17201104]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
minva
minva,
попутно вопрос, можно ли на WareSupply алиас прицепить, чтоб покороче писать в Case?


можно, если ее в секции from указать.
  update ws
  set JournalDocKind = case 
                         when IsSupply = 1 and IsExternal = 1 then 4 
                         when IsSupply = 0 and IsExternal = 1 then 5 
                         .....
                       end  
  from inserted I 
    join WareSupply ws on
      I.OpID = ws.OpID
31 янв 15, 18:20    [17201105]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
minva
daw, да я источник ошибки понимаю :)
Я не понимаю в чем разница В БОЛе косяк?


разница в том, что в таблице PurchaseOrderHeader, которая обновляется в примере из БОЛа нет столбцов с такими же именами, как в inserted. там обновляется не та же таблица, на которую триггер повешен, а другая.
31 янв 15, 18:22    [17201114]     Ответить | Цитировать Сообщить модератору
 Re: Триггер - что не так написал?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
daw,
Блин, точно.... там же название таблицы из трех слов... первые два прочитал, на третье внимание не обратил
31 янв 15, 18:52    [17201225]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить