2011-04-09 127 views
29

这是非常简单的问题。如何从存储过程返回表?

我试图从一个存储过程返回一个表,像

select * from emp where [email protected] 

我想回到这个查询结果表。我必须通过存储过程来做到这一点。

+0

为什么你需要的结果的表?你的推理会改变我的想法。 – Brian 2011-04-09 12:06:34

+0

你想要回到另一个程序! – 2011-04-09 12:16:37

+0

@Anand Thangappan:我从ASP.NET应用程序中调用此SP。 – jams 2011-04-09 12:18:30

回答

49

你的问题在哪里?

存储过程,只需创建:

CREATE PROCEDURE dbo.ReadEmployees @EmpID INT 
AS 
    SELECT * -- I would *strongly* recommend specifying the columns EXPLICITLY 
    FROM dbo.Emp 
    WHERE ID = @EmpID 

这是所有有。

从ASP.NET应用程序,只需创建一个SqlConnectionSqlCommand(不要忘记设置CommandType = CommandType.StoredProcedure

DataTable tblEmployees = new DataTable(); 

using(SqlConnection _con = new SqlConnection("your-connection-string-here")) 
using(SqlCommand _cmd = new SqlCommand("ReadEmployees", _con)) 
{ 
    _cmd.CommandType = CommandType.StoredProcedure; 

    _cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int)); 
    _cmd.Parameters["@EmpID"].Value = 42; 

    SqlDataAdapter _dap = new SqlDataAdapter(_cmd); 

    _dap.Fill(tblEmployees); 
} 

YourGridView.DataSource = tblEmployees; 
YourGridView.DataBind(); 

然后填写例如一个DataTable与该数据并将其绑定到例如一个GridView。

+0

嗨,如果我需要该表是在声明的输出参数,那么呢?可以做到吗?这是输出的数据类型? – 2016-11-10 17:23:54

+0

@GuillermoVarini:不,你不能发回整个表作为输出参数,目前不支持 – 2016-11-10 19:05:30

4

在SQL Server 2008中您可以使用

http://www.sommarskog.se/share_data.html#tableparam

否则简单,同普通的执行

CREATE PROCEDURE OrderSummary @MaxQuantity INT OUTPUT AS 

SELECT Ord.EmployeeID, SummSales = SUM(OrDet.UnitPrice * OrDet.Quantity) 
FROM Orders AS Ord 
    JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID) 
GROUP BY Ord.EmployeeID 
ORDER BY Ord.EmployeeID 

SELECT @MaxQuantity = MAX(Quantity) FROM [Order Details] 

RETURN (SELECT SUM(Quantity) FROM [Order Details]) 
GO 

我希望它帮助你

4

非常重要的包括

SET NOCOUNT ON; 

进入SP,在第一行中, 如果您在SP中执行INSERT,则END SELECT不能返回值。

THEN, in vb60 you can 
SET RS = CN.EXECUTE(SQL) 

OR

RS.OPEN CN,RS, SQL 
+0

这适用于更复杂的情况,谢谢! – Chisko 2016-08-27 21:17:22