2010-04-10 62 views
0

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

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

如果您告诉我们它做了什么,那么您可能不需要“CountAll”的存储过程。 – Thomas 2010-04-10 15:05:22

+0

托马斯,统计所有计数从另一个表的一些条目以ID为参数 – luppi 2010-04-10 15:13:15

+0

鉴于这一点,你不应该需要一个sp。如果您向我们提供CountAll过程的详细信息,我们可以更具体一些,但通常,SQL语法中有很多方法可以在单个查询中获取计数。 – Thomas 2010-04-10 15:21:47

回答

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 

如果存储过程返回多PLE列,那么你必须使用UDF,跨应用,派生表或返回2个结果集到客户端

基本上,存储的特效不能用你想

+0

CountAll需要传递一个ID参数... – luppi 2010-04-10 15:14:22

+0

基本上我想要为返回给用户的table1的每一行执行CountAll – luppi 2010-04-10 15:16:18

+0

好的,使用CROSS APPLY或udf或派生表,然后 – gbn 2010-04-10 15:31:08

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

你不应该” t需要一个存储过程来简单地从另一个表中获取项目的数量。你可以在子查询中完成。

0

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

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

相关问题