Axapta X++;查询以选择字符串类型字段的最大值
我在Dynamics AX 2012表格中有一个字段,填充了序列号PRE1 00162格式,我需要返回下一个序列号,在本例中是PRE1 00163 在遗留系统上,通过运行Axapta X++;查询以选择字符串类型字段的最大值,axapta,x++,dynamics-ax-2012,Axapta,X++,Dynamics Ax 2012,我在Dynamics AX 2012表格中有一个字段,填充了序列号PRE1 00162格式,我需要返回下一个序列号,在本例中是PRE1 00163 在遗留系统上,通过运行 SELECT MAX(RIGHT(SerialNumber,5))+1 FROM Table_Serials WHERE SerialNumber LIKE 'PRE1%' 针对SQL server上的表 如何在X++中获得相同的结果?到目前为止我的猜测是 select maxof(right(SerialNumber,
SELECT MAX(RIGHT(SerialNumber,5))+1 FROM Table_Serials
WHERE SerialNumber LIKE 'PRE1%'
针对SQL server上的表
如何在X++中获得相同的结果?到目前为止我的猜测是
select maxof(right(SerialNumber,5))+1
from tableSerials
where tableSerials.SerialNumber
like tableSerials;
但是它显示了在maxof(right(
part)之后开始的语法错误
谢谢!
正确的方法应该是创建()
如果要保留原有功能,必须使用创建AOT视图。 字段
ViewMethod
的示例:
专用静态服务器str compSerial()
{
str srcCol=SysComputedColumn::returnField(tableStr(TableSerialsView)、identifierStr(TableSerials_1)、fieldStr(TableSerials,SerialNumber));
str result=strFmt('MAX(右(%1,5))+1',srcCol);
返回结果;
}
然后将计算字段添加到视图字段并选择。我的一位睿智的同事也提出了这种方法,这种方法同样有效:
static void CompNextSerial(Args _args)
{
str value;
int num;
str 10 prefix;
SerialsTable serialsTable;
prefix = "PRE1 *";
select firstOnly serialsTable
order by SerialNumber desc
where serialsTable.SerialNumber like prefix;
value = subStr (serialsTable.SerialNumber, strLen(serialsTable.SerialNumber) - 4 , 5);
num = str2int(value) + 1;
info (strFmt('%1', num));
}
谢谢你,Matej。我相信你让我走上了正确的道路。所以我让
str srcCol
部分正常工作,但当我试图返回str结果时,我得到了SQL错误描述:[Microsoft][SQL Server Native Client 10.0][SQL Server]列“TABLESERIALS.SerialNumber”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。usrcCol
的视图返回u Partition、RecId、CompNextSerial、SerialNumber、dataAreaId和recVersion字段。添加GroupBy字段SerialNumber没有帮助。就像在常规SQ中一样五十、 group by段中的字段列表必须与select语句中的字段相同。请尝试将此字段包括到视图上的“字段”节点,以便与“group by”一致一个,就像你在构建一个常规SQL select语句时所做的那样。终于让它工作了。问题是我没有为SerialNumber字段选择Aggregation=Max。像'PRE1%'这样的怎么样呢?
part?如何让它在这个视图中工作?谢谢你们,伙计们!比使用Max(右(…)
(更好的性能、可用性和可读性,更少复杂的方法)。视图只是对遗留代码的重写。