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

时间:2014-12-31 05:09:15

标签: c# sql-server stored-procedures

我有一个带有2个参数(StudentID和CurrentSmester)作为输入的存储过程,并返回带有字段的表:

  1. 课程代码
  2. 更新类型
  3. 更新ID
  4. 此存储过程由我办公室的另一个团队创建。我无法修改它,但同时我想在我的Webservice(我正在为android构建)中使用它来确保数据保持一致。

    我的要求是获得:

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

      这可能吗?如果是,请指导我完成实施。

      感谢你和新年快乐!!

3 个答案:

答案 0 :(得分:1)

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

像这样......

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

答案 1 :(得分:0)

您可以将STORED PROCEDURE的结果插入到临时表(表变量或临时表)中,然后从该表中选择并加入Courses表以检索标题。

SQL Fiddle DEMO

示例代码

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

答案 2 :(得分:0)

- 第一个存储过程

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