我想知道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=?))
是什么意思?
答案 0 :(得分:1)
这些字段是Dynamics AX中数据隔离实现的一部分。更多信息here
字段T1.PARTITION
与分区有关:
分区通过使用AOS应用于数据查询的特殊处理来划分和隔离安装的业务数据。当查询表中存在名为Partition的系统字段时,会在查询发送到基础Microsoft SQL Server数据库之前立即执行此特殊处理。
字段T1.DATAAREAID
与公司或法人实体有关:
每个分区至少包含一个公司或法人实体。法人实体仅出现在一个分区中。创建合法实体时,系统会将其分配给当前分区。法律实体永远不能移动到另一个分区。但是,它的数据可以从分区导出,然后导入另一个分区中的另一个公司。
问号最终会被分区和公司的实际值所取代,具体取决于调用该语句的上下文。
答案 1 :(得分:1)
问号是占位符,使SQL Server能够为搜索值经常变化的查询计算执行计划。
Microsoft Dynamics AX可以传递任一参数(占位符)或 查询中的文字(实际值)。
•参数允许Microsoft Dynamics AX和数据库服务器 搜索值更改时重用查询。他们是首选 高频查询。
•文字允许数据库服务器优化查询 具体的信息。这为此提供了最佳查询 一条信息,但数据库服务器必须执行 执行每个查询的优化。文字可以使用很长时间 运行复杂连接等查询。
开发人员可以通过指定覆盖默认的文字使用 他们的代码中的参数,或管理员可以覆盖使用 服务器配置实用程序中的文字。