2011-04-09 15 views
29

È una domanda molto semplice.Come restituire una tabella da una stored procedure?

Sto cercando di restituire una tabella da una stored procedure, come

select * from emp where [email protected] 

Voglio restituire questo risultato della query come una tabella. Devo farlo attraverso una stored procedure.

+0

Perché avete bisogno i risultati come una tavola? Il tuo ragionamento cambierà la risposta, credo. – Brian

+0

vuoi tornare ad un'altra procedura !!! –

+0

@Anand Thangappan: sto chiamando questo SP dalla mia applicazione ASP.NET. – jams

risposta

49

Dove è il tuo problema ??

per la stored procedure, basta creare:

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

Questo è tutto quello che c'è.

Dall'applicazione ASP.NET, basta creare un SqlConnection e un SqlCommand (non dimenticare di impostare il 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(); 

e quindi riempire esempio a DataTable con quei dati e collegarli ad es. un GridView.

+0

Ciao, e se avessi bisogno che quella tabella sia in un parametro di output dichiarato. può essere fatto? qual è il tipo di dati di quell'output? –

+0

@GuillermoVarini: no, non è possibile inviare indietro un'intera tabella come parametro di output, che al momento non è supportato –

4

In SQL Server 2008 è possibile utilizzare

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

oppure semplice e uguale a esecuzione comune

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 

io spera che il suo aiuto a voi

4

MOLTO importante includono

SET NOCOUNT ON; 

in SP, nella prima riga, se si esegue INSERT in SP, END SELECT non può restituire valori.

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

O

RS.OPEN CN,RS, SQL 
+0

Questo ha funzionato per una situazione un po 'più complessa, grazie! – Chisko

Problemi correlati