C# 使用参数从另一个存储过程调用存储过程

C# 使用参数从另一个存储过程调用存储过程,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有一个存储过程,它使用两个参数StudentID和currentsMaster作为输入,并返回带有字段的表: 课程代码 更新类型 更新Id 此存储过程由我办公室的另一个团队创建。我不能修改它,但同时我想在我为android构建的Web服务中使用它,以确保数据保持一致 我的要求是: 课程代码 更新类型 更新Id 课程名称 我是否可以创建另一个存储过程,它将使用我提到的参数调用该存储过程,并与课程表进行连接以获取课程标题 这可能吗?如果是,请您指导我如何实施 谢谢你,新年快乐 您可以将存储过程的结

我有一个存储过程,它使用两个参数StudentID和currentsMaster作为输入,并返回带有字段的表:

课程代码 更新类型 更新Id 此存储过程由我办公室的另一个团队创建。我不能修改它,但同时我想在我为android构建的Web服务中使用它,以确保数据保持一致

我的要求是:

课程代码 更新类型 更新Id 课程名称 我是否可以创建另一个存储过程,它将使用我提到的参数调用该存储过程,并与课程表进行连接以获取课程标题

这可能吗?如果是,请您指导我如何实施


谢谢你,新年快乐

您可以将存储过程的结果插入临时表变量或临时表中,然后从该表中进行选择并连接到课程表以检索标题

示例代码

CREATE TABLE Courses(
  CourseCode VARCHAR(50),
  CourseName VARCHAR(250)
);
INSERT INTO Courses VALUES ('A','AA'), ('B','BB');

CREATE PROCEDURE OtherTeamsSP(
  @StudentID INT,
  @CurrentSmester INT
)
AS
SELECT 'A' CourseCode,
        'FOO' UpdateType,
        1 UpdateId;

CREATE PROCEDURE MyProcedure(
  @StudentID INT,
  @CurrentSmester INT
)
AS
CREATE TABLE #SPOutput(
  CourseCode VARCHAR(50),
  UpdateType VARCHAR(50),
  UpdateId INT
 )

INSERT INTO #SPOutput
EXEC OtherTeamsSP @StudentID, @CurrentSmester

SELECT *
FROM #SPOutput s INNER JOIN
    Courses c ON s.CourseCode = c.CourseCode
DROP TABLE #SPOutput
调用新SP

EXEC MyProcedure 1,2

创建一个新的存储过程,将从现有存储过程返回的结果插入临时表,将课程表与该临时表连接起来,就可以开始了

像这样的

CREATE PROCEDURE usp_NewProc 
@StudentID INT ,
@CurrentSmester INT 
AS
BEGIN
  SET NOCOUNT ON;

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL 
  DROP TABLE #temp

CREATE TABLE #temp 
(
CourseCode [DataType],
UpdateType [DataType],
Update Id  [DataType]
)

INSERT INTO #temp 
EXEC existsting_proc @StudentID , @CurrentSmester


SELECT t.* , C.CourseTitle
FROM #temp t INNER JOIN CourseTable C  on <join Condition>

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL 
  DROP TABLE #temp

END

-第一存储过程

CREATE PROCEDURE FirstSP
@MyFirstParam INT
AS
DECLARE @MyFirstParamValue INT
SELECT @MyFirstParamValue = @MyFirstParam * @MyFirstParam
RETURN (@MyFirstParamValue)
GO
CREATE PROCEDURE SecondSP
@SecondParam INT
AS
DECLARE @SecondParamValue INT
SELECT @SecondParamValue = @SecondParam * @SecondParam
RETURN (@SecondParamValue)
GO
-第二存储过程

CREATE PROCEDURE FirstSP
@MyFirstParam INT
AS
DECLARE @MyFirstParamValue INT
SELECT @MyFirstParamValue = @MyFirstParam * @MyFirstParam
RETURN (@MyFirstParamValue)
GO
CREATE PROCEDURE SecondSP
@SecondParam INT
AS
DECLARE @SecondParamValue INT
SELECT @SecondParamValue = @SecondParam * @SecondParam
RETURN (@SecondParamValue)
GO
-将一个存储过程的结果作为另一个存储过程的参数传递

DECLARE @FirstValue INT, @SeondValue INT
-第一SP

EXEC @FirstValue = FirstSP 5
-第二SP

EXEC @SeondValue = SecondSP @FirstValue
SELECT @SeondValue SecondSP
GO
-清理

DROP PROCEDURE FirstSP
DROP PROCEDURE SecondSP
GO

据我所知,这是不可能的。你为什么不修改现有的,而不是创建一个新的,将有一个更多的列。或者你应该创建你自己的单独SP并做任何你喜欢的事情。我不能修改它,因为它被非常繁重的应用程序使用,而且他们不想向它添加单个字段。我不能创建单独的SP,因为我不希望以后他们对存储过程进行任何更改,它将不会反映在我的存储过程中。非常感谢,您的解决方案确实有一定道理,但我有几个问题。我会在存储过程中创建临时表吗?是的,临时表在SP中,如果行数不太大或存在权限问题,您也可以使用表变量替换临时表