2014-10-22 39 views
0

我有填充PRE1的編號00162格式動態AX 2012表中的字段,我需要回到下一個序列號,在這種情況下將PRE1 00163X ++查詢來選擇字符串類型字段的最大價值

在遺留系統是由SQL服務器上運行

SELECT MAX(RIGHT(SerialNumber,5))+1 FROM Table_Serials 
WHERE SerialNumber LIKE 'PRE1%' 

對陣表來實現的。

如何在X ++中實現相同的結果?我的猜測到目前爲止

select maxof(right(SerialNumber,5))+1 
    from tableSerials 
    where tableSerials.SerialNumber 
like tableSerials; 

但它顯示了語法錯誤開始之後maxof(right(一部分。

謝謝!

回答

2

我的一個明智的同事也建議這個方法,這也適用:

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)); 
} 
+1

比'MAX(RIGHT(...))'更好的方法(更好的性能,可用性和可讀性,更簡單的方法)。視圖只是重寫遺留代碼。 – Matej 2014-10-23 10:51:03

3

正確的方法應該是創建Number SequenceWhitepaper)。


如果繼電器要保留你必須創建一個computed column AOT查看舊功能。 實施例田間ViewMethod

private static server str compSerial() 
{ 
    str srcCol = SysComputedColumn::returnField(tableStr(TableSerialsView), identifierStr(TableSerials_1), fieldStr(TableSerials, SerialNumber)); 
    str result = strFmt('MAX(RIGHT(%1, 5)) + 1', srcCol); 

    return result; 
} 

然後計算字段添加到視圖和選擇的領域。

+0

謝謝你,馬捷。我相信你讓我走上了正確的道路。 所以我得到'str srcCol'部分工作,但是當我試圖返回'str result'時,我得到_SQL錯誤描述:[Microsoft] [SQL Server Native Client 10.0] [SQL Server] Column'TABLESERIALS .SerialNumber'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 _ 'srcCol'的視圖返回_Partition_,_RecId_,_CompNextSerial_,_SerialNumber_,_dataAreaId_和_recVersion_字段。 添加GroupBy字段_SerialNumber_沒有幫助。 – Donatas 2014-10-22 15:53:21

+0

正如您在常規SQL中所做的那樣,按分組分組的字段列表必須與select語句中的字段相同。嘗試將這些字段包含到視圖上的「Fields」節點上,以便與「group by」一致,就像您在構建常規SQL select語句時一樣。 – 2014-10-22 21:35:37

+0

終於搞定了。問題是我沒有爲_SerialNumber_字段選擇** Aggregation ** = ** Max **。 – Donatas 2014-10-23 08:30:15

相關問題