01.10.2010, 11:35 | #1 |
Участник
|
Триггер SQL вызывает ошибку при обновлении записи
Здравствуйте,
При заведении update триггера на любой таблице, у которой заполняется поле ModifiedDateTime выдается ошибка: Цитата:
[Microsoft][SQL Native Client][SQL Server]The target table 'Имя_таблицы' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.
X++: ALTER TRIGGER [dbo].[InventTableLog] ON [dbo].[InventTable] AFTER UPDATE AS BEGIN DECLARE @RecId AS bigint SELECT @RecId = max(RecId) FROM [dbo].[InventTableAudit] IF @RecId IS NULL BEGIN SELECT @RecId = 0 END INSERT INTO [dbo].[InventTableAudit] (ItemId, ItemCategoryId, LogModifiedDateTime, RecVersion, RecId) select ItemId, ItemCategoryId, getdate(), 1, @RecId+1 FROM INSERTED END Последний раз редактировалось Stainless; 01.10.2010 в 11:37. |
|
01.10.2010, 12:30 | #2 |
Участник
|
Мощная конструкция!!!
Это читали? - http://support.microsoft.com/kb/961073 |
|
01.10.2010, 14:14 | #3 |
Участник
|
Спасибо, но после обновления ошибка не исчезает.
PS. Эта конструкция также используется в стандарном функционале: X++: Table: ShipCarrierStaging Method: createSQLTrigger |
|
01.10.2010, 17:08 | #4 |
Участник
|
Ну http://blogs.msdn.com/b/sqlprogramma...reresults.aspx или
http://www.mssqltips.com/tip.asp?tip=1381 Поищите - в сети полно всяких описаний. |
|
01.10.2010, 17:51 | #5 |
Участник
|
Как мне удалось выяснить, ошибка происходит из-за того, что Акса формирует некорректный оператор SQL, такой, что совместная работа триггеров с ним невозможна:
X++: UPDATE INVENTTABLE
SET ITEMNAME=?,RECVERSION=?,MODIFIEDDATETIME=dateadd(ms, -datepart(ms,getutcdate()), getutcdate()),MODIFIEDBY=?
OUTPUT INSERTED.MODIFIEDDATETIME WHERE ((RECID=?) AND (RECVERSION=?)) |
|
23.10.2012, 11:36 | #6 |
Участник
|
Сейчас столкнулся с той же проблемой: идентичные триггеры на Insert в базе ax 3.0 отрабатывают нормально, а вот в базе DAX 2009 выдают ошибку про Output Clause.
|
|