|
|
#1 |
|
Участник
|
Здравствуйте,
При заведении 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. |
|
|
|
|
#2 |
|
Участник
|
|
|
|
|
|
#3 |
|
Участник
|
Спасибо, но после обновления ошибка не исчезает.
PS. Эта конструкция также используется в стандарном функционале: X++: Table: ShipCarrierStaging Method: createSQLTrigger |
|
|
|
|
#4 |
|
Участник
|
Ну http://blogs.msdn.com/b/sqlprogramma...reresults.aspx или
http://www.mssqltips.com/tip.asp?tip=1381 Поищите - в сети полно всяких описаний. |
|
|
|
|
#5 |
|
Участник
|
Как мне удалось выяснить, ошибка происходит из-за того, что Акса формирует некорректный оператор SQL, такой, что совместная работа триггеров с ним невозможна:
X++: UPDATE INVENTTABLE
SET ITEMNAME=?,RECVERSION=?,MODIFIEDDATETIME=dateadd(ms, -datepart(ms,getutcdate()), getutcdate()),MODIFIEDBY=?
OUTPUT INSERTED.MODIFIEDDATETIME WHERE ((RECID=?) AND (RECVERSION=?)) |
|
|
|
|
#6 |
|
Участник
|
Сейчас столкнулся с той же проблемой: идентичные триггеры на Insert в базе ax 3.0 отрабатывают нормально, а вот в базе DAX 2009 выдают ошибку про Output Clause.
|
|
|