AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.10.2010, 11:35   #1  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
! Триггер 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
Проверялось на AX2009SP1 (5.0.1500.2116)

Последний раз редактировалось Stainless; 01.10.2010 в 11:37.
Старый 01.10.2010, 12:30   #2  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от Stainless Посмотреть сообщение
...SELECT @RecId = max(RecId) FROM [dbo].[InventTableAudit]...
Мощная конструкция!!!
Это читали? - http://support.microsoft.com/kb/961073
Старый 01.10.2010, 14:14   #3  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Спасибо, но после обновления ошибка не исчезает.

PS. Эта конструкция также используется в стандарном функционале:
X++:
Table: ShipCarrierStaging
Method: createSQLTrigger
Старый 01.10.2010, 17:08   #4  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Ну http://blogs.msdn.com/b/sqlprogramma...reresults.aspx или
http://www.mssqltips.com/tip.asp?tip=1381
Поищите - в сети полно всяких описаний.
Старый 01.10.2010, 17:51   #5  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Как мне удалось выяснить, ошибка происходит из-за того, что Акса формирует некорректный оператор SQL, такой, что совместная работа триггеров с ним невозможна:
X++:
UPDATE INVENTTABLE
     SET ITEMNAME=?,RECVERSION=?,MODIFIEDDATETIME=dateadd(ms, -datepart(ms,getutcdate()), getutcdate()),MODIFIEDBY=?
     OUTPUT INSERTED.MODIFIEDDATETIME WHERE ((RECID=?) AND (RECVERSION=?))
Дело как раз в использовании Output без Into
Старый 23.10.2012, 11:36   #6  
Corel is offline
Corel
Участник
Ex AND Project
 
73 / 15 (1) ++
Регистрация: 19.04.2007
Сейчас столкнулся с той же проблемой: идентичные триггеры на Insert в базе ax 3.0 отрабатывают нормально, а вот в базе DAX 2009 выдают ошибку про Output Clause.
Теги
sql, update, триггер

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Connection к другому SQL Server Poleax DAX: Программирование 5 19.10.2010 10:49
Проблема.База данных SQL обнаружила ошибку. kalex_a DAX: Программирование 14 20.04.2010 19:11
БД SQL обнаружила ошибку. Нет полей в таблице Alexx7 DAX: Администрирование 11 11.11.2009 15:12
Создание новой записи + Фильтр (3.0 SP5 KR2 SQL) polygris DAX: Программирование 7 03.01.2008 16:17
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:35.