Select Statement Syntax [AX 2012]
Applies To: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2, Microsoft Dynamics AX 2012 Feature Pack, Microsoft Dynamics AX 2012
|
SelectStatement |
= |
select Parameters |
|
Parameters |
[ [ FindOptions ] [ FieldList from ] ] TableBufferVariable [ IndexClause ] [ Options ] [ WhereClause ] [ JoinClause ] |
|
|
FindOptions |
= |
crossCompany | reverse | firstFast | [ firstOnly | firstOnly10 | firstOnly100 | firstOnly1000 ] | forUpdate | noFetch | [forcePlaceholders |forceLiterals] | forceselectorder | forceNestedLoop | repeatableRead | validTimeState |
|
FieldList |
= |
Field { , Field } | * |
|
Field |
= |
Aggregate ( FieldIdentifier ) | FieldIdentifier |
|
Aggregate |
= |
sum | avg | minof | maxof | count |
|
Options |
= |
[ order by , group by , FieldIdentifier [ asc | desc ] { , FieldIdentifier [ asc | desc ] }] | [ IndexClause ] |
|
IndexClause |
= |
index IndexName | index hint IndexName |
|
WhereClause |
= |
where Expression |
|
JoinClause |
= |
[exists | notexists | outer ] join Parameters |
Keywords Used in the Select Syntax
|
Keyword |
Description |
Example |
|---|---|---|
|
asc |
An option on the order by or group by clause. The sorting is ascending. (Sort is ascending by default.) |
select * from custTable order by Name asc; |
|
avg |
Returns the average of the fields. |
CustTable custTable; ; select avg(value) from custTable; print custTable.value; |
|
count |
Returns the number of records. |
CustTable xCT; int64 iCountRows; ; Select COUNT(RecID) from xCT; iCountRows = xCT.RecID; |
|
crossCompany |
Returns data for all companies that the user is authorized to read from. (Acontainer can be added to reduce the number of companies involved.) |
CustTable custTable; container conCompanies = ['dat','dmo']; ; select crossCompany :conCompanies * from custTable; |
|
desc |
An option on the order by or group by clause. The sorting is descending. |
select * from custTable order by Name desc; |
|
exists |
A method that returns a Boolean value and a join clause. |
while select AccountNum, Name from custTable order by AccountNum exists join * from ctr where (ctr.AccountNum == custTable.AccountNum) |
|
firstFast |
A priority hint. The first row appears more quickly but the total return time for this option might be slower. The firstFast hint is automatically issued from all forms, but is rarely used directly from X++. |
select firstFast custTable order by AccountNum; |
|
firstOnly |
Speeds up the fetch. Instructs MorphX to fetch only the first record. |
static InventTable find( ItemId itemId, boolean update = false) { InventTable inventTable; ; inventTable.selectForUpdate (update); if (itemId) { select firstonly inventTable index hint ItemIdx where inventTable.itemId == itemId; } return inventTable; } |
|
firstOnly10 |
Same as firstOnly, except returns 10 rows instead of one. |
|
|
firstOnly100 |
Same as firstOnly, except returns 100 rows instead of one. |
|
|
firstOnly1000 |
Same as firstOnly, except returns 1000 rows instead of one. |
|
|
forceLiterals |
NoteYou are advised not to use the forceLiterals keyword in X++ select statements, because it could expose code to an SQL injection security threat.
forceLiterals instructs the kernel to reveal the actual values that are used in whereclauses to the Microsoft SQL Server database at the time of optimization. forceLiterals and forcePlaceholders are mutually exclusive. |
|
|
forceNestedLoop |
Forces the Microsoft SQL Server database to use a nested-loop algorithm to process a particular SQL statement containing a join algorithm. This means that a record from the first table is fetched before any records from the second table are fetched. Typically, other join algorithms, such as hash-joins and merge-joins, would be considered. This keyword is often combined with the forceSelectOrder keyword. |
while select forceSelectOrder forceNestedLoop inventTransThis index hint TransIdIdx where inventTransThis.InventTransId == inventTrans.InventTransId && inventTransThis.StatusIssue <= StatusIssue::ReservOrdered |
|
forcePlaceholders |
Instructs the kernel not to reveal the actual values used in where clauses to the SQL Server database at the time of optimization. This is the default in all statements that are not join statements. The advantage of using this keyword is that the kernel can reuse the access plan for other similar statements with other search values. The disadvantage is that the access plan is computed without taking into consideration that data distribution might not be even. The access plan is an on-average access plan. forcePlaceholders and forceLiterals are mutually exclusive. |
static void forcePlaceHoldersExample(Args _args) { SalesTable salesTable; SalesLine salesLine; ; while select forcePlaceholders salesLine join salesTable where salesTable.SalesId == salesLine.SalesId && salesTable.SalesId == '10' { //more code } } |
|
forceSelectOrder |
Forces the SQL Server database to access the tables in a join in the specified order. If two tables are joined, the first table in the statement is always accessed first. This keyword is often combined with the forceNestedLoop keyword. |
display ForecastHasPurch hasForecastPurch() { ForecastPurch forecastPurch; InventDim inventDim; ; select firstOnly forcePlaceholders forceSelectOrder recId from forecastPurch index hint ItemIdx where forecastPurch.itemId == this.itemId exists join inventDim index hint DimIdIdx where inventDim.inventDimId == forecastPurch.inventDimId && inventDim.configId == this.configId; return forecastPurch.recId; } |
|
forUpdate |
Selects records exclusively for update. Depending on the underlying database, the records may be locked for other users. |
ttsBegin; while select forUpdate ledgerJournalTrans index hint NumVoucherIdx where ledgerJournalTrans.journalNum == _journalNum && ledgerJournalTrans.voucher == _voucher { ledgerJournalTrans.doDelete(); counter++; } if (counter && ledgerJournalTable.journalType != LedgerJournalType::Periodic) { NumberSeq::release( ledgerJournalTable.voucherSeries, _voucher); } ttsCommit; |
|
group by |
Instructs the database to group selected records by fields. |
CustTable custTable; ; while select sum(CreditMax) from custTable group by CustGroup { print custTable.CustGroup, " ",custTable.CreditMax; } |
|
index |
Instructs the database to sort the selected records as defined by the index. |
CustTable custTable; ; while select AccountNum, Name from custTable index AccountIdx { print custTable.AccountNum, " ", custTable.Name; } |
|
index hint |
Gives the database a hint to use this index to sort the selected records as defined by the index. The database can ignore the hint. NoteA wrong index hint can have a big performance impact. Index hints should only be applied to SQL statements that do not have dynamic where clauses or order byclauses, and where the effect of the hint can be verified.
|
while select forUpdate ledgerJournalTrans index hint NumVoucherIdx where ledgerJournalTrans.journalNum == _journalNum |
|
join |
Used to join tables on a column that is common to both tables. The join criteria are specified in the where clause because there is no on keyword in X++ SQL. Reduces the number of SQL statements that are needed if you want to loop through a table and update transactions in a related table. For example, if you process 500 records in a table, and want to update related records in another table, and use a nested while select to do this, there will be 501 trips to the database. If you use a join, there will be a single trip to the database. |
while select ledgerTable join ledgerTrans where ledgerTrans.accountNum == ledgerTable.accountNum { amountMST += ledgerTrans.amountMST; } |
|
maxof |
Returns the maximum of the fields. |
CustTable custTable; ; select maxof(CreditMax) from custTable; |
|
minof |
Returns the minimum of the fields. |
CustTable custTable; ; select minof(CreditMax) from custTable; |
|
noFetch |
Indicates that no records are to be fetched at present. This is typically used when the result of the select is passed on to another application object, for example, a query that performs the actual fetch. |
select noFetch custTable order by AccountNum |
|
notExists |
Chosen only if there are no posts. |
while select AccountNum, Name from custTable order by AccountNum notExists join * from ctr where (ctr.AccountNum == custTable.AccountNum) |
|
optimisticLock |
Forces a statement to run with Optimistic Concurrency Control even if a different value is set on the table. For more information, see Optimistic Concurrency Control. |
select optimisticLock custTable where custTable.AccountNum > '1000' |
|
order by |
Instructs the database to sort the selected records by fields in the order by list. |
select * from custTable order by accountNum desc where custTable.AccountNum > "100"; |
|
outer |
Returns all rows from the first-named table, including rows that have no match in the second-named table. This is a left outer join, although there is no left keyword. There is no right outer join in X++ SQL. |
while select AccountNum |
|
pessimisticLock |
Forces a statement to run with Pessimistic Concurrency Control even if a different value is set on the table. For more information, see Optimistic Concurrency Control. |
select pessimisticLock custTable where custTable.AccountNum > '1000'; |
|
repeatableRead |
Specifies that no other transactions can modify data that has been read by logic inside the current transaction, until after the current transaction completes. An explicit transaction completes at either ttsAbort or at the outermost ttsCommit. For a stand-alone select statement, the transaction duration is the duration of theselect command. However, the database sometimes enforces the equivalent ofrepeatableRead in individual select statements even without this keyword appearing in your X++ code (depending on how the database decides to scan the tables). |
For more information, see the documentation for the underlying relational database product. |
|
reverse |
Records are returned in reverse order. |
select reverse custTable order by AccountNum; |
|
sum |
Returns the sum of the fields. Can be used to sum all accounts, order lines, and so on. |
CustTable custTable; ; select sum(CreditMax) from custTable; |
|
validTimeState |
Filters rows from a table that has its ValidTimeStateFieldType property set to a value other than None. For more information, see Valid Time State Tables and Date Effective Data. |
static void VtsJob1(Args _args) |
Announcements: New book: "Inside Microsoft Dynamics AX 2012 R3" now available. get your copy at the MS Press Store
Community Additions
'like' example
As of AX 2012 it is possible to use the 'like' keyword where a '*' means 0 to many, a '?' means exactly 1.
SELECT * from tCustTable order by tCustTable.AccountNum desc where (!(tCustTable.Name like '*i*i*') && tCustTable.Name like 'T?e *')
Select Statement Syntax [AX 2012]的更多相关文章
- Temporary TempDB Tables [AX 2012]
Temporary TempDB Tables [AX 2012] 1 out of 4 rated this helpful - Rate this topic Updated: November ...
- Following a Select Statement Through Postgres Internals
This is the third of a series of posts based on a presentation I did at the Barcelona Ruby Conferenc ...
- Overview of Form Control Types [AX 2012]
Overview of Form Control Types [AX 2012] Other Versions 0 out of 1 rated this helpful - Rate this to ...
- Using Controls in a Form Design [AX 2012]
Using Controls in a Form Design [AX 2012] This topic has not yet been rated - Rate this topic Update ...
- Hosting custom WPF calendar control in AX 2012
原作者: https://community.dynamics.com/ax/b/axilicious/archive/2013/05/20/hosting-custom-wpf-calendar-c ...
- Temporary InMemory Tables [AX 2012]
Temporary InMemory Tables [AX 2012] This topic has not yet been rated - Rate this topic Updated: Oct ...
- Table Properties [AX 2012]
Table Properties [AX 2012] 1 out of 2 rated this helpful - Rate this topic Updated: July 20, 2012 Ap ...
- SQL Fundamentals: Basic SELECT statement基本的select语句(控制操作的现实列)(FROM-SELECT)
SQL Fundamentals || Oracle SQL语言 Capabilities of the SELECT Statement(SELECT语句的功能) Data retrieval fr ...
- How to: Debug X++ Code Running in .NET Business Connector [AX 2012]
This topic has not yet been rated - Rate this topic http://msdn.microsoft.com/EN-US/library/bb19006 ...
随机推荐
- MFC+Android模拟器 实现 自动玩“天天爱消除”
朋友用QT做了个自动玩的,觉得有意思,自己也想用MFC做个试试. 模拟器用的BlueStacks.Android SDK带的那个模拟器不知道是不是设置的问题,开游戏很卡. 用MFC建了对话框工程,配置 ...
- jad 反编译java
1 安装 解压jad.zip文件到任何的目录.将会创建两个文件,一个是jad.exe另一个是readme文 件,不需要任何别安装2 如何使用jad 如果我们有一个单独的java文件example1.c ...
- audio.js – 随时随地,播放 HTML5 的声音
audio.js是一个HTML5标签的简易包装.但它不仅在支持HTML5的浏览器上能够轻松调用标签,并在不支持HTML5的浏览器上也能通过Flash作为B计划使用.除此之外,audio.js所提供的界 ...
- 将textField编辑完内容作为参数发送请求
将textField编辑完内容作为参数发送请求 首先赋值默认值 其次把编辑完的内容传给model,这样的话,model里面的数据就是编辑完之后的内容了
- Windows Server 2012 FTP配置 后客户机一直登录不上
配置FTP时出现奇怪的问题,服务器配置完成后客户机访问FTP站点时输入用户名密码一直不对. 经多次试验后发现,默认情况下是如下图配置.将用户下次登录时必须更改密码勾掉,勾选密码永不过期即可正常登录.
- [IT新应用]农民朋友的电子商务
今天通过http://olympiawa.gov/visitors.aspx olympia市的官网,到 http://www.olympiafarmersmarket.com/vendors-1/到 ...
- ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
实现持久登录,即用户在登录时,勾选了"记住我"之后,无论是否关闭浏览器,只要不退出登录,在指定的时间内始终保持登录状态(缺点是在另一台电脑上登录过后,之前那台电脑就不能继续保持登录 ...
- python 线程使用
################# 线程演示脚本 ####################### #coding=utf-8import threadingfrom time import ctim ...
- Ecshop的购物流程代码分析详细说明
Ecshop的购物流程代码分析详细说明 (2012-07-30 10:41:12) 转载▼ 标签: 购物车 结算中心 商品价格 ecshop ecshop购物流程 杂谈 分类: ECSHOP研究院 同 ...
- QQ群笔记
uuid就好比你的名字,类似到了班级里,你的名字会被学号替代.同样的连接之后,uuid会被handle句柄替代. 问下CC2541串口用DMA接收的时候,调试程序时候发现,串口发一帧数据,进入两 ...
Note