【问题标题】:AX 2009 error: The length of the specified literal string exceeds max limitAX 2009 错误:指定文字字符串的长度超过最大限制
【发布时间】:2014-09-26 17:37:24
【问题描述】:

保存SalesLine时,只更改Name字段,doUpdate方法偶尔会抛出错误异常:

指定文字字符串的长度超过最大限制。

当 Name 的字符串长度为 128 时,doUpdate 成功。
当 Name 的字符串长度为 129 时,doUpdate 会失败(但有时如果更改字符会成功)。

Name 字段的定义长度为 1000 个字符(数据库中的nvarchar(1000))。

在生产系统中失败,但在测试系统中没有!

未启用数据库日志记录。数据库是 SQL 2008 R2。 AX 内核版本:5.0.1500.5660

有人看到这个错误吗?
有什么提示可以解决吗?

【问题讨论】:

  • 如果通过SQL server直接输入字段,会遇到同样的限制吗?
  • 这是系统更新吗?发生的频率是多少?如果您可以在生产环境中设置 try/catch/breakpoint,并转储正在运行的 SQL,然后尝试 AnthonyBlake 所说的并在 SQL 中手动运行它,看看是否会发生相同的错误。如果您可以将其隔离为仅 SQL,则诊断会容易得多。
  • 使用 AX SQL 跟踪获取 SQL 的好主意。明天试试。
  • 嗯,AX 在日志中显示了一个空的 SQL 表达式。我认为AX在生成SQL表达式(UPDATE语句)。
  • 我有几个问题:如果你运行 update() 而不是 doUpdate() 会失败吗?您说如果您更改字符有时会成功,任何更改是否有效或者您正在替换特定字符?

标签: sql-server axapta dynamics-ax-2009


【解决方案1】:

不要在查询中使用文字。 我在 salesLine 数据源 init 方法中询问您使用文字。 喜欢:

SalesLine_ds.query().literals(true);

【讨论】:

    【解决方案2】:

    可能在 sql server 2008 中使用了引号名称?

    在此版本的 SQL Server 中,长度限制为 128 个字符似乎存在问题

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

    【讨论】:

    • 我不认为 AX 使用 QUOTENAME,因为我从来没有见过这样的 SQL 语句。
    【解决方案3】:

    我也看到过这种行为。 它必须与大卫发布的文字相结合。您在查询中使用literalsplaceholders 吗?

    我可以在内核 5.0.1600.2967(在销售表上)中完美地重现这个。

    一定是forceliteralsdoUpdate()组合的bug

    将字段更改为数据类型备注或其他一些更改(例如更改 cachelookup)也无济于事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多