내 DB이내가 최근 감사에 몇 가지 새로운 질문을 추가 한
tblAudits
PK AuditID
AuditStatus nvarchar(50)
tblQuestionDefs
PK QuestionID
tblAuditAnswers
PK AnswerID
FK AuditID
FK QuestionID
처럼 보이는 부모 테이블의 모든 행에 대해 자식 테이블에 삽입하고 나는 각각의 새로운 질문에 대한 답변 레코드를 추가 할 모든 능동적 인 감사. SQL에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내가 커서 또는 루프을 사용할 수 있지만 모두 매우 느린 AFAIK입니다. 어떤 세트 기반의 방법으로 그것을 할 수 있습니까?
여기에 커서 기반의 코드
declare
@AuditID int
declare AuditsCursor cursor fast_forward for
select AuditID from tblAudits where AuditStatus='Issued' or AuditStatus='Pending' order by AuditID desc
open AuditsCursor
fetch next from AuditsCursor
into @AuditID
while @@FETCH_STATUS = 0
begin
insert into tblAuditAnswers (AuditID, QuestionID)
select @AuditID as AuditID, QuestionID
from tblQuestionDefs
where QuestionID not in (
select QuestionID from tblAuditAnswers where [email protected]
)
fetch next from AuditsCursor
into @AuditID
end
close AuditsCursor
deallocate AuditsCursor
일 - 아주 좋은 대답. 왜 나는 항상 '예외'와 '간섭'을 잊을 지 모르겠다. – Lamak
@ 마틴 스미스 굉장! Cross Audit이 현재 감사 (예 : A.AuditID)에 대해 tblAuditAnswers의 QuestionID 만 선택하는 방법을 설명 할 수 있습니까? –
@ just.another.programmer - "새로운 질문마다 답변 레코드를 모든 활성 감사에 추가하려고합니다."라고 말하고 싶습니다. 파생 테이블'Q'는 모든 새로운 질문을 포함합니다. ('tblAuditAnswers'에 아직 대응하는 엔트리가없는'tblQuestionDefs'에서 새로운 것으로 가정 됨). 만약'X' 행을 반환하고'tblAudits'에 대한 질의에 의해'Y' 행이 반환되면 액티브 감사를 찾으면 크로스 조인은 두 결과의 모든 조합에 대해'X * Y' 행을 반환합니다. –