Ошибка AX 2009: длина указанной литеральной строки превышает максимальный предел

При сохранении SalesLine с изменением только поля Name метод doUpdate иногда будет вызывать исключение ошибки:

Длина указанной литеральной строки превышает максимальный предел.

Когда длина строки Name равна 128, doUpdate завершается успешно.
Когда длина строки Name составляет 129, doUpdate завершается ошибкой (но иногда это удается, если вы меняете символы).

Поле Name имеет определенную длину 1000 символов (nvarchar(1000) в базе данных).

Это не работает в производственной системе, но не в тестовой системе!

Ведение журнала базы данных не включено. База данных — SQL 2008 R2. Версия ядра AX: 5.0.1500.5660

Кто-нибудь сталкивался с этой ошибкой?
Есть какие-нибудь советы по устранению?


person Jan B. Kjeldsen    schedule 19.06.2012    source источник
comment
если вы вводите напрямую в поле через SQL-сервер, сталкиваетесь ли вы с тем же ограничением?   -  person AnthonyBlake    schedule 19.06.2012
comment
Это систематическое обновление и какова частота появления? Если вы можете поставить точку try/catch/breakpoint в рабочей среде и вывести выполняющийся SQL, попробуйте то, что сказал Энтони Блейк, и запустите его вручную в SQL, чтобы увидеть, возникает ли та же ошибка. Если вы можете изолировать его только от SQL, будет намного проще диагностировать.   -  person Alex Kwitny    schedule 19.06.2012
comment
Хорошая идея получить SQL с помощью трассировки AX SQL. Попробую это завтра.   -  person Jan B. Kjeldsen    schedule 19.06.2012
comment
Ну, AX показывает пустое выражение SQL в журнале. Я думаю, что AX срабатывает при генерации выражения SQL (оператор UPDATE).   -  person Jan B. Kjeldsen    schedule 20.06.2012
comment
У меня есть пара вопросов: произойдет ли сбой, если вы запустите update() вместо doUpdate()? Вы заявили, что иногда это удается, если вы меняете персонажей, какие-либо изменения работают или вы заменяете конкретных персонажей?   -  person Michael Brown    schedule 22.06.2012
comment
Вызов doUpdate из метода SalesLineType.update. Сбой был связан с данными, в одном случае у меня было 999 символов «l», заменив последний на «!» удастся, с '.' это потерпит неудачу. Но он делал это стабильно даже после перезагрузки.   -  person Jan B. Kjeldsen    schedule 22.06.2012


Ответы (3)


Не используйте литералы в запросе. Я думаю, что в методе инициализации источника данных salesLine вы используете литералы. Нравиться:

SalesLine_ds.query(). Литералы (истина);

person Merlin666    schedule 20.06.2014

Возможно, в SQL Server 2008 используется имя цитаты?

Похоже, что в этой версии SQL-сервера существует проблема с ограничением длины в 128 символов.

http://sqlserverpedia.com/blog/sql-server-bloggers/watchout-when-using-quotename-2/

person AnthonyBlake    schedule 19.06.2012
comment
Я не думаю, что AX использует QUOTENAME, так как я никогда не видел SQL-заявление с этим. - person Jan B. Kjeldsen; 19.06.2012

Я тоже видел такое поведение. Это должно быть что-то в сочетании с литералами, опубликованными Дэвидом. Вы используете literals или placeholders в своем запросе?

Я могу прекрасно воспроизвести это в ядре 5.0.1600.2967 (на продающем столе).

Это должно быть ошибка с комбинацией forceliterals и doUpdate()

Изменение поля на памятку типа данных или некоторые другие изменения, такие как изменение cachelookup, также не помогли.

person Tom V    schedule 26.09.2014