헤더, 하위 헤더 및 광고 항목 세부 정보가있는 광고 주문을 삭제하고 대체 광고 제목이 무엇이든 동일한 광고 주문을 작성하기 전에 광고 항목 세부 정보가 표시 될 수 있습니다. 변경 사항이있는 최신 버전을 다시 쓰려고하면 pk 위반 오류가 발생합니다. 분석 후에는 DELETE 문이 작동하는 것처럼 보일지라도 (예 : x 행이 영향을 받음) - 대상 표가 변경되지 않은 채로 남아 있습니다. 그래서, 그것은 pk vio 문제를 설명 할 것입니다. 내가 뭘 놓치고 있니?tsql : 동작 삭제
다음은 문 중 하나입니다 :
-- detail level (drop products)
DELETE dprods FROM [SQLsever].[WIP].[order].DropProducts as dprods
INNER JOIN #dropprods t on t.OrderId = dprods.OrderId
AND t.OrderDropId = dprods.OrderDropId
AND t.DropProdId = dprods.DropProdId;
문을 실행 한 후, 난 여전히 목표 테이블의 모든 200 개 이상의 행이와 나는 #dropprods 임시 테이블에있는 200 개 이상의 ID를 가지고있다. 왜? 더 나은 문제를 ** * ** * ** * ** * * DELETE 문을 정의하려면 편집을 할
** 는 문제가되지 않았다. 이 문제는 중첩 된/명명 된 트랜잭션 집합과 관련이 있습니다. DELETE 문은 하나 아래에 있고 INSERT 문은 다른 문 아래에 있습니다. 여기에 내가 가진 것이있다. 그것은 분명히 잘못되었습니다. 내가 뭘하려는 건 내가 좋은 대체 INSERT를해야 알기 전에 DELETE를 저 지르지 않도록하는 것이다. 여기에 내가 한 일이 있습니다 : * 수정 된 T-SQL (저장 트랜잭션) 수정 * ** 이 TSQL이 작동합니다.
-- CHANGED
BEGIN TRANSACTION
SAVE TRANSACTION process_orders
BEGIN TRY
-- detail level
DELETE lprods FROM [SQLServer].[WIP].[order].LiftProducts as lprods
INNER JOIN #liftprods t on t.OrderId = lprods.OrderId
AND t.OrderLiftId = lprods.OrderLiftId
AND t.LiftProdId = lprods.LiftProdId;
-- the rest of the deletes
--NOTE: No commit transaction here; saving it to the end
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_MESSAGE() AS ErrorMessage;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION process_orders;
END CATCH
BEGIN TRANSACTION
-- CHANGED
SAVE TRANSACTION process_orders
BEGIN TRY
-- CHANGED
COMMIT TRANSACTION process_orders;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_MESSAGE() AS ErrorMessage;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION process_orders ;
END CATCH
세계적인 난독 화 챔피언 쉽에 참가할 계획이 있습니까? DropOrder, OrderDrop dprods, t ... 우리가 함께 일하면 나랑 너는 커다란 스타일로 떨어질거야. 트랜잭션을 커밋하는 것을 잊어 버리는 것 말고는, 삭제 된 것으로보고되는 경우, 그들은 생각하는 트랜잭션이 아닙니다. 계단식 삭제를 검색 할 수도 있습니다 ... –
Tony에 답해 주셔서 감사합니다. 5 분 전에 나는 모든 거래와 비올라를 꺼냈다. 삭제가 작동했습니다. 천국에 감사하십시오. 나는 내 마음을 잃어 버렸다고 생각하지 않았다. 어쨌든이 경기장에서는 아니야! :) 트랜잭션 문제로 인해 문제 설명을 업데이트 중입니다. – plditallo
제 생각에는 잘 맞았지만 추측이었습니다. :) –