3

현재 삭제 문제가 있습니다. 레코드에 대해 계단식 삭제 기능을 사용할 수있는 권한이 없습니다. userId가 약 20 개의 다른 테이블에서 참조되는 User 테이블이 있습니다. 나는 동적 인 쿼리를 작성하여 재귀 적으로 userId를 참조하는 모든 테이블을 찾아서 삭제할 수 있기를 원합니다 (각 테이블에 대해 자체 외래 키를 찾아 삭제해야 함). 따라서 기본적으로 재귀 함수/procedure는 테이블 이름을 매개 변수 및 기본 키 ID로 취하고 연속 삭제를 수행합니다. 그 일을 할 수있는 모든 스크립트? information_schema에 대한 쿼리를 실행하여 User 테이블에 대한 종속성의 한 수준을 검색 할 수 있지만 레코드를 지울 수 있도록 연결된 테이블의 모든 종속성을 반복적으로 찾아야합니다.주어진 테이블에서 외래 키 그래프 쿼리를 동적으로 작성하십시오.

+1

아마도 : http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97454 –

+0

전혀하지 않습니다. 모든 것을 삭제하는 것으로 보입니다. 그럼에도 불구하고 올바른 순서대로. 이 스크립트도 실제로 사용할 수 있습니다. 나는 누군가가 그 전에 대답을 찾지 못했다면 나는 오늘 저녁에 집에 돌아갈 때 그것을 해결할 것이라고 생각한다. 내 접근 방식은 PK/테이블에 의해 레코드를 식별하고 FK로 종속성을 재귀 한 다음 최종 레코드에서 레코드를 위쪽으로 삭제하는 것입니다. 재미있는 도전 ... – Peter

+1

내가 틀렸어. 그것은 효과가있다. 단지 '% 1'을 삭제하려는 키로 대체하십시오. 그러나 그것은 매우 오래 바람이 부는 것처럼 보입니다. 그러나 그것이 효과가 있다면 왜 고쳐야합니까? – Peter

답변

1

"Nathan Skerl"이 제안한대로이 링크 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97454을 사용하고 작업을 수행했습니다. 유일한 것은 fnCascadingDelete 함수가 RecordID 매개 변수를 포함하도록 수정하여 삭제하려는 레코드의 ID를 전달할 수 있었고 % 1을 (를) 검색하고 @RecordID로 바꿨습니다. 그것은 완벽하게 작동합니다. 아주 깊은 중첩을 위해서는 조금 느려지지만 예상됩니다.