devotionMedlem sedan jan. 20013 582 inlägg Hej igen!
Har kört lite tester idag och kommit fram till att transaktionen nog inte gör så som jag tänkt mig...
Den behandlar dubletter på hela tabellen; tblMaterial Det ska den ju iofs göra, men det ska ju vara kopplat till ett speciellt uppdrag.
Ska försöka förklara lite tydligare... :)
Om ett uppdrag har TaskId 100 och detta har dubletter på artikelnr 0000040 ska dessa slås ihop
Uppdraget med TaskId 110 skall inte påverkas, även om artikelnr 0000040 även ingår där.
Som det är nu, tror jag att alla dubletter i tabellen slås ihop oavsett vilket TaskId de tillhör
Dvs. summerinegn skall bara göras inom samma TaskId.
Hoppas ni fattar! :)
Jag bifogar en bildserie där första bilden; before_trans.png visar databasen före transaktionen. after_trans.png visar resultatet efter och önskat_resultat.png visar hur jag vill att det ska bli
Mvh
Henrik
devotionMedlem sedan jan. 20013 582 inlägg Har lagt till lite förklarande bilder... :)
Mvh
Henrik
emissionMedlem sedan dec. 19996 721 inlägg Det har inte med transaktionen att göra. Den är bara ett säkerhetsbälte och påverkar på intet sätt vad resultatet av frågorna blir.
Du får helt enkelt utöka dina villkor:
update q set Amount = (select sum(Amount)
from tblMaterial
where tblMaterial.ArtNr = q.ArtNr[b] and tblMaterial.Taskid=q.TaskId[/b])
from tblMaterial as q
delete from tblMaterial
where id not in
(select max(id)
from tblMaterial as q
where tblMaterial.ArtNr= q.ArtNr[b] and tblMaterial.TaskId= q.TaskId[/b])
devotionMedlem sedan jan. 20013 582 inlägg Det verkar fungera perfekt! :)
DECLARE @updaterr int, @deleteerr int
BEGIN TRAN
update q set Amount = (select sum(Amount)
from tblMaterial
where tblMaterial.ArtNr = q.ArtNr and tblMaterial.Taskid = q.TaskId)
from tblMaterial as q
where ArtNr in
(select ArtNr
from tblMaterial
group by ArtNr
having count(*) > 1)
SELECT @updaterr=@@ERROR
delete from tblMaterial
where id not in
(select max(id)
from tblMaterial as q
where tblMaterial.ArtNr = q.ArtNr and tblMaterial.TaskId = q.TaskId)
SELECT @deleteerr=@@ERROR
IF (@updaterr<>0 or @deleteerr<>0)
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END
Mvh
Henrik