Microsoft Dynamics AX SQL JOIN转换

时间:2016-07-21 08:34:46

标签: sql-server join axapta microsoft-dynamics

我想知道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中的CROSS JOIN:

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=?))是什么意思?

2 个答案:

答案 0 :(得分:1)

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

字段T1.PARTITION与分区有关:

  

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

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

  

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

问号最终会被分区和公司的实际值所取代,具体取决于调用该语句的上下文。

答案 1 :(得分:1)

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

  

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

     

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

     

•文字允许数据库服务器优化查询   具体的信息。这为此提供了最佳查询   一条信息,但数据库服务器必须执行   执行每个查询的优化。文字可以使用很长时间   运行复杂连接等查询。

     

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