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

Sql 使用select语句(具有多个结果)作为存储过程的输入参数,sql,tsql,stored-procedures,parameters,Sql,Tsql,Stored Procedures,Parameters,我有两张桌子。情节,和评估。每一集由多个评估组成 SQLServer2005 我有一个功能完整的DeleteAssessment存储过程,它接受AssessmentID作为输入参数并将其删除。我正在尝试设置一个deleteAccession评估,该评估在删除该集之前调用deleteAccessment存储过程来删除所有相关的评估。我相信这段代码进一步解释了我想做的事情 EXEC DeleteAssessment (SELECT AssessmentID FROM Assessments WHER

我有两张桌子。情节,和评估。每一集由多个评估组成

SQLServer2005

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

EXEC DeleteAssessment (SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID)
作为参数的select语句将返回多个assessmentID,然后我需要将其传递给deleteMassessment存储过程


我是不是走错了路?有什么我遗漏的吗?

如果使用SQL Server 2008,正确的方法是使用TVP作为参数传入相关表。

如果使用SQL Server 2008,正确的方法是使用TVP作为参数传入相关表。

是的,这不起作用。如果DeleteAssessment足够复杂,以至于您不能仅删除与某一集相关的评估,则需要在DeleteAssessment中执行以下操作:

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;

是的,那是行不通的。如果DeleteAssessment足够复杂,以至于您不能仅删除与某一集相关的评估,则需要在DeleteAssessment中执行以下操作:

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;

忘了提及,我在SQL Server 2005中。忘了提及,我在SQL Server 2005中。这是一种奇怪的做事方式,为什么不使用引用完整性和安装级联删除/更新来为您解决这个问题?听起来像是一种简单的一对多关系。这是一种奇怪的处理方式,为什么不使用引用完整性和设置级联删除/更新来为您解决这个问题呢?听起来像是简单的一对多关系。这看起来不错。我会尝试一下,如果成功的话,我会相信你的答案…这看起来不错。我会尝试一下,如果成功的话,我会相信你的答案。。。