0

在 NAVISION 2009 R2 中,我有一个迭代 3 个表的报告:

  • 服务标头:82 266 项 / 120512 Ko
  • 服务热线 : 311 117 items / 720 352 Ko
  • 服务分类帐条目:2 293 754 项 / 2 453 568 Ko

我正在导出大约 10 000 个标题和 50 000 行。

SQL Server Profiler中,我看到 NAVISION 使:

  • 1 对标头的查询

    SELECT * FROM "database_name"."dbo"."company_name$Service Header"

  • 10 000 行查询(使用 DataItemLink 属性)

    SELECT * FROM "database_name"."dbo"."company_name$Service Line"

  • Ledger Entries 的 50 000 次查询(使用 SETRANGE + SETFILTER 过程)

    SELECT * FROM "database_name"."dbo"."company_name$Service Line"

由于 Service Ledger 条目表的大小,这些查询每个大约需要 300 毫秒(根据 StmtCompleted 事件),因此总共需要 4 个多小时

由于我使用了 Ledger 条目表中数量有限的属性,

有没有办法SELECT *通过 NAVISION 避免默认请求,而是列出必要的属性?

4

1 回答 1

1

我认为没有办法限制 Nav 获取的字段,但这是一个实验性的想法,我曾经将它用于集成项目,它是这样的:

  1. 在 SQL Server 中为每个表创建一个视图(甚至是组合视图)
  2. 使用导航对象名称样式保存视图:[CompanyName]$[ViewNAme]
  3. 在 Nav 中创建一个表并将属性“LinkedObject”设置为 true
  4. 以与视图完全相同的名称保存表,但不包含公司名称:ViewName
  5. 将视图中具有相同名称的字段添加到导航表并保存。

现在在您的报告中使用这些表(“LinkedObject - View”)。

于 2020-06-23T19:32:16.650 回答