我有两张桌子。剧集和评估。每集都由多个评估组成。
SQL Server 2005。
我有一个功能齐全的DeleteAssessment存储过程,它接受AssessmentID作为输入参数并删除它。我正在尝试设置DeleteEpisode评估,在删除剧集之前,调用DeleteAssessment存储过程来删除所有相关评估。我相信这段代码进一步解释了我想要做的事情。
EXEC DeleteAssessment (SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID)
作为参数的select语句将返回多个assessmentID,然后我需要将其传递给DeleteAssessment存储过程。
我是以错误的方式解决这个问题吗?有什么我想念的吗?
答案 0 :(得分:2)
如果您使用的是SQL Server 2008,正确的方法是使用TVP将相关表作为参数传递。
答案 1 :(得分:1)
是的,那不行。如果DeleteAssessment足够复杂,您无法删除与剧集相关的评估,则需要在DeleteEpisode中执行以下操作:
DECLARE @AssessmentID INT;
CREATE TABLE #AssessmentIDs (AssessmentID INT);
INSERT #AssessmentIDs (AssessmentID)
SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID;
WHILE (SELECT COUNT(*) FROM #AssessmentIDs WHERE AssesmnentID = @AssessmentID) > 0
BEGIN
SELECT @AssessmentID = TOP 1 AssessmentID FROM #AssessmentIDs
EXEC DeleteAssessment @AssessmentID
DELETE #AssessmentIDs WHERE AssessmentID = @AssessmentID
END;