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