【问题标题】:Microsoft Dynamics AX SQL JOIN TranslationMicrosoft Dynamics AX SQL JOIN 翻译
【发布时间】:2016-07-21 08:34:45
【问题描述】:

我想知道 Axapta 如何翻译其 SQL 语句并遇到了这个问题: how-joins-in-x-select-statement-are-translated-into-t-sql

这是网站上给出的第一个示例。

在 X++ 中加入:

select AccountNum from custTable
    join TaxGroupId from custGroup
    where custGroup.CustGroup == custTable.CustGroup;

T-SQL 中的交叉连接:

SELECT T1.ACCOUNTNUM, T1.RECID, T2.TAXGROUPID, T2.RECID
FROM CUSTTABLE T1 CROSS JOIN CUSTGROUP T2
WHERE ((T1.PARTITION=?) AND (T1.DATAAREAID=?))
  AND (((T2.PARTITION=?) AND (T2.DATAAREAID=?)) 
   AND (T2.CUSTGROUP=T1.CUSTGROUP))

我现在想知道这句话中的问号是什么意思。 由于语法错误,? 被标记为错误。

WHERE ((T1.PARTITION=?) AND (T1.DATAAREAID=?)) 是什么意思?

【问题讨论】:

    标签: sql-server join axapta microsoft-dynamics


    【解决方案1】:

    这些字段是 Dynamics AX 中数据隔离实施的一部分。更多信息here

    字段T1.PARTITION 与分区相关:

    分区通过使用 AOS 应用于数据查询的特殊处理来划分和隔离安装的业务数据。当查询表中存在名为 Partition 的系统字段时,此特殊处理会在查询发送到基础 Microsoft SQL Server 数据库之前立即发生。

    字段T1.DATAAREAID 与公司或法人实体相关:

    每个分区至少包含一个公司或法人实体。法人实体仅出现在一个分区中。创建法人时,系统会将其分配给当前分区。法人实体永远不能移动到另一个分区。但是,它的数据可以从分区中导出,然后导入到另一个分区中的另一个公司。

    问号最终会被 Partitions 和 Companies 的实际值取代,具体取决于调用语句的上下文。

    【讨论】:

    • TAXGROUPID 之类的字段怎么样。它不是系统字段,但在页面的最后一个示例中,它也与 =? .那是因为它在子查询中并且也被替换了吗?
    • 这也是一个占位符,在该示例中将替换为“Std”。通过这种方式,SQL 服务器接收参数化查询(显示在博客中)和参数值,这将根据上下文而有所不同。
    【解决方案2】:

    问号是占位符,使 SQL 服务器能够计算搜索值经常变化的查询的执行计划。

    Microsoft Dynamics AX 可以传递参数(占位符)或 查询中的文字(实际值)。

    • 参数允许 Microsoft Dynamics AX 和数据库服务器 搜索值更改时重用查询。他们是首选 高频查询。

    • 文字允许数据库服务器优化查询 具体信息。这提供了一个最佳查询 一条信息,但数据库服务器必须执行 对执行的每个查询进行优化。字面量可以长期使用 运行查询,例如复杂连接。

    开发人员可以通过指定 代码中的参数,或者管理员可以覆盖 服务器配置实用程序中的文字。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多