Как вернуть таблицу из хранимой процедуры? - PullRequest
34 голосов
/ 09 апреля 2011

Это очень простой вопрос.

Я пытаюсь вернуть таблицу из хранимой процедуры, например

select * from emp where id=@id

Я хочу вернуть этот результат запроса в виде таблицы. Я должен сделать это с помощью хранимой процедуры.

Ответы [ 3 ]

56 голосов
/ 09 апреля 2011

Где твоя проблема ??

Для хранимой процедуры просто создайте:

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

Это все, что есть.

Из вашего приложения 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();

, а затем заполните, например, DataTable с этими данными и связать их, например, с GridView.

4 голосов
/ 04 февраля 2014

ОЧЕНЬ важно включить:

 SET NOCOUNT ON;

в SP. В первой строке, если вы делаете INSERT в SP, END SELECT не может возвращать значения.

ПОТОМ, в vb60 вы можете:

SET RS = CN.EXECUTE(SQL)

ИЛИ:

RS.OPEN CN, RS, SQL
4 голосов
/ 09 апреля 2011

В 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

Я надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...