如何从另一个存储过程调用存储过程并将结果作为第一列返回?
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存储过程返回一些列而不仅仅是标量?
答案 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中显示。