如何从存储过程返回表?

jam*_*ams 34 sql sql-server stored-procedures

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

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

select * from emp where id=@id
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 57

你的问题在哪里?

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

CREATE PROCEDURE dbo.ReadEmployees @EmpID INT
AS
   SELECT *  -- I would *strongly* recommend specifying the columns EXPLICITLY
   FROM dbo.Emp
   WHERE ID = @EmpID
Run Code Online (Sandbox Code Playgroud)

这就是全部.

从你的ASP.NET应用程序,只需创建一个SqlConnection和一个SqlCommand(别忘了设置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();
Run Code Online (Sandbox Code Playgroud)

然后用例如a填充DataTable该数据并将其绑定到例如GridView.

  • 如果您前面有多个“ select / select into”语句用于进行一些计算等操作,但是只希望最后一个“ select”返回表,该怎么办?默认情况下是这种情况吗? (2认同)

小智 6

包括:

 SET NOCOUNT ON;
Run Code Online (Sandbox Code Playgroud)

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

然后,在 vb60 中,您可以:

SET RS = CN.EXECUTE(SQL)
Run Code Online (Sandbox Code Playgroud)

或者:

RS.OPEN CN, RS, SQL
Run Code Online (Sandbox Code Playgroud)


Ana*_*pan 5

在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
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助