如何从存储过程返回表?

时间:2011-04-09 12:05:32

标签: sql sql-server stored-procedures

这是一个非常简单的问题。

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

select * from emp where id=@id

我想将此查询结果作为表返回。我必须通过存储过程来完成此操作。

3 个答案:

答案 0 :(得分:55)

你的问题在哪里?

对于存储过程,只需创建:

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。

答案 1 :(得分: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

我希望对你有所帮助

答案 2 :(得分:4)

包含以下内容非常重要:

 SET NOCOUNT ON;

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

那么,在vb60中你可以:

SET RS = CN.EXECUTE(SQL)

OR:

RS.OPEN CN, RS, SQL