使用select语句(具有多个结果)作为存储过程的输入参数

时间:2011-10-06 17:22:57

标签: sql tsql stored-procedures parameters

我有两张桌子。剧集和评估。每集都由多个评估组成。

SQL Server 2005。

我有一个功能齐全的DeleteAssessment存储过程,它接受AssessmentID作为输入参数并删除它。我正在尝试设置DeleteEpisode评估,在删除剧集之前,调用DeleteAssessment存储过程来删除所有相关评估。我相信这段代码进一步解释了我想要做的事情。

EXEC DeleteAssessment (SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID)

作为参数的select语句将返回多个assessmentID,然后我需要将其传递给DeleteAssessment存储过程。

我是以错误的方式解决这个问题吗?有什么我想念的吗?

2 个答案:

答案 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;