Использование оператора выбора (с несколькими результатами) в качестве входного параметра для хранимой процедуры - PullRequest
0 голосов
/ 06 октября 2011

У меня есть две таблицы. Эпизоды и оценки. Каждый эпизод состоит из нескольких оценок.

SQL Server 2005.

У меня есть полностью работающая хранимая процедура DeleteAssessment, которая принимает AssessmentID в качестве входного параметра и удаляет его. Я пытаюсь настроить оценку DeleteEpisode, которая перед удалением эпизода вызывает хранимую процедуру DeleteAssessment для удаления всех связанных оценок. Я считаю, что этот код объясняет, что я хочу сделать ..

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

Оператор выбора в качестве параметра вернет несколько идентификаторов оценки, которые мне затем нужно будет передать хранимой процедуре DeleteAssessment.

Я поступаю неправильно? Я что-то упускаю?

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Если вы используете SQL Server 2008, правильный способ - использовать TVP для передачи соответствующей таблицы в качестве параметра.

1 голос
/ 06 октября 2011

Да, это не сработает. Если 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;
...