2014-10-17 5 views
0

행을 삭제하기 전에 행을 삭제할 수 있는지 확인하려면 어떻게합니까? 새로운 함수 CanDelete (RowID)를 개발하는 것과 같습니다.SQL Server - 행을 검사하는 방법 삭제하기 전에 삭제할 수 있습니다

일부 행에 대해이 테이블을 다른 테이블에 참조했습니다.

내가 할 수있는 한 가지 방법은 예외를 잡는 것입니다. 더 좋은 방법이 있습니까?

+1

기본적으로 트랜잭션의 성공 여부는 미리 알 수 없습니다. 다른 테이블의 행이 주어진 행을 참조하지 않더라도, 확인하는 시간과 삭제하려고 시도한 시간 사이에 참조하는 다른 행을 추가 할 수 있습니다. 그런데 삭제하고자하는 행을 참조하는 다른 테이블의 행 수를 계산하는 쿼리를 작성할 수는 있지만 강력한 솔루션은 아니며 첫 번째 테이블에서 예외를 처리하는 것보다 느릴 수도 있습니다 장소). – Cameron

+1

삭제하기 전에 삭제를 저장 프로 시저로 쓰거나 대신 Delete 키를 사용하여 외래 키를 확인하는 논리로 작성하십시오. – Crowcoder

답변

0

행을 삭제하고 싶지 않다는 가정하에 다른 테이블에서 참조됩니다.

나는 이것을 C# 코드에 맡기지 않을 것입니다. 삭제 또는 다른 사람이 데이터베이스에 직접 액세스하는 다른 응용 프로그램이 개발되면 어떻게 될까요?

먼저 관계에 delete rule을 설정해야합니다. 이차적으로 삭제하기 전에 점검 할 트리거를 작성하고 거기에서 헨젤 할 수 있습니다. 마지막으로 당신은 쓸모가없는 진술을 쓸 수 있습니다. 예를 들어

DELETE from TableA where ID in (select ID from tableA a left outer join tableB b on a.ID = b.ID where b.ID is NULL)