2016-08-02 20 views
2

Momentan habe ich 3 Tabellen.Kopieren von Spaltenwerten über X ++ basierend auf Vergleichen von Werten

KEV_PackTable KEV_Persons HcmWorkerRecId

ich die KEV_Persons Tabelle am Ausstieg aus, die zur Zeit eine Beziehung hat:

Kev_PackTable.PersonId -> KEV_Persons.PersonId

Anstelle dieser Tabelle, ich will Um die HcmWorker-Tabelle zu verwenden und eine Beziehung herzustellen: Kev_PackTable.HcmWorker_RecId -> HcmWorker.RecId

Wenn K EV_PackTable.Personid ist der gleiche Wert wie HcmWorker.PersonnelNumber, dann füllen Sie die RecId dieser Zeile in die Spalte: HcmWorker_RecId in der Tabelle: KEV_PackTable.

Es ist eher eine Frage als eine AX2012-Frage, aber ich kann keine Lösung finden, um die RecId auszufüllen, wenn die Personid mit dem PersonalityNumber übereinstimmt.

Ich glaube, meine SQL-Anweisung zu sein hat:

UPDATE KEV_PackTable 
SET HcmWorkerRecId = HcmWorker.RecId 
FROM KEV_PackTable 
JOIN HcmWorker 
ON KEV_PackTable.PersonId = HcmWorker.PersonnelNumber 

Wie kann ich diese Abfrage in X laufen ++? Beginne ich mit einer Select forUpdate-Anweisung?

+1

Können Sie uns den Code/die Abfrage zeigen, die Sie bisher versucht haben? Ich würde Ihnen lieber helfen, die Probleme in Ihrem vorhandenen Code zu finden, als Ihnen eine Copy & Paste-Antwort zu geben. –

+0

Sicher! Ich habe meinen ursprünglichen Post bearbeitet. – user6639789

+2

In Ihrem Tabellenverzeichnis (2. Zeile) sollte die letzte Tabelle HcmWorkerRecId wahrscheinlich HcmWorker sein, oder? – DAXaholic

Antwort

3

Wenn ich alles bekam Recht dann sollte dieser Code für Sie arbeiten update_recordset verwenden, so dass Sie die Möglichkeit der Durchführung eines Bulk-Update haben

KEV_PackTable packTable; 
HcmWorker  hcmWorker; 
; 

update_recordset packTable 
    setting HcmWorkerRecId = hcmWorker.RecId 
    join firstOnly RecId from hcmWorker 
     where hcmWorker.PersonnelNumber == packTable.PersonId; 

Eine alternative Lösung wäre while select forUpdate mit wie so

KEV_PackTable packTable; 
HcmWorker  hcmWorker; 
; 

ttsbegin; 
while select forUpdate packTable 
    join firstOnly RecId from hcmWorker 
     where hcmWorker.PersonnelNumber == packTable.PersonId 
{ 
    // ttsbegin; 
    packTable.HcmWorkerRecId = hcmWorker.RecId; 
    packTable.update(); 
    // ttscommit; 
} 
ttscommit; 

Mit diesem können Sie - abhängig von Ihren Bedürfnissen - zu mehreren kleineren Transaktionen wechseln (indem Sie die äußeren ttsbegin/ttscommit auskommentieren und die inneren verwenden), was wahrscheinlich i ndie Gesamtausführungszeit erhöhen, kann jedoch zu weniger blockierten Sitzungen führen.