web-dev-qa-db-fra.com

Comment retourner une table à partir d'une procédure stockée?

C'est une question très simple.

J'essaie de renvoyer une table à partir d'une procédure stockée, comme

select * from emp where id=@id

Je veux retourner ce résultat de requête sous forme de tableau. Je dois le faire via une procédure stockée.

34
jams

Où est ton problème ??

Pour la procédure stockée, créez simplement:

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

C'est tout ce qu'il y a.

À partir de votre application ASP.NET, créez simplement un SqlConnection et un SqlCommand (n'oubliez pas de définir le 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();

puis remplissez par exemple un DataTable avec ces données et le lier à par exemple une GridView.

56
marc_s

Dans SQL Server 2008, vous pouvez utiliser

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

ou bien simple et identique à l'exécution courante

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

J'espère son aide pour vous

5
Anand Thangappan

Il est TRÈS important d'inclure:

 SET NOCOUNT ON;

dans SP, en première ligne, si vous faites INSERT dans SP, le END SELECT ne peut pas renvoyer de valeurs.

ALORS, en vb60, vous pouvez:

SET RS = CN.EXECUTE(SQL)

OU:

RS.OPEN CN, RS, SQL
4
makuki