从另一个存储过程调用存储过程并将结果作为新列返回

时间:2010-04-10 14:58:57

标签: sql sql-server tsql stored-procedures

如何从另一个存储过程调用存储过程并将结果作为第一列返回?

ALTER PROCEDURE [dbo].[GetItems]
AS
SET NOCOUNT ON

SELECT ID, AddedDate, Title,Description,
       Result of Stored Procedure "CountAll" call with parameter ID as Total 
FROM dbo.Table1

还有:如果CountAll存储过程返回一些列而不仅仅是标量?

3 个答案:

答案 0 :(得分:4)

一个值的输出参数:

EXEC CountAll @Total OUTPUT
SELECT ID, AddedDate, Title,Description,@total as Total
FROM dbo.Table1

或使用CROSS APPLY:

SELECT ID, AddedDate, Title,Description,@total as Total
FROM dbo.Table1
CROSS APPLY
(SELECT soemthing as total FROM .... WHERE...)

或使用UDF

或派生表

SELECT ID, AddedDate, Title,Description, totals.Total
FROM
   dbo.Table1 T
   JOIN
   (SELECT count(*) as Total, id FROM dbo.Table1 GROUP BY ID) totals ON T.ID = totals.id

如果存储过程返回多个列,则必须使用udf,交叉应用,派生表或将2个结果集返回给客户端

基本上,存储过程无法按您希望的方式使用

答案 1 :(得分:1)

SELECT ID, AddedDate, Title,Description,
       , ( Select Count(*)
            From OtherTable
            Where Table1.Id = OtherTable.Id ) As ItemCount
FROM dbo.Table1

您不需要存储过程来简单地从另一个表中获取项目数。您可以在子查询中执行此操作。

答案 2 :(得分:0)

您需要用户定义的函数UDF而不是过程。 (如果我记得很清楚,你不能从UDF调用存储过程)

如何重构您的查询的其他可能性在gbn的aswer中显示。