2011-04-09 41 views
29

Es una pregunta muy simple.¿Cómo devolver una tabla desde un procedimiento almacenado?

estoy tratando de devolver una tabla de un procedimiento almacenado, como

select * from emp where [email protected] 

Quiero devolver este resultado de la consulta como una tabla. Tengo que hacer esto a través de un procedimiento almacenado.

+0

¿Por qué necesita los resultados como una tabla? Tu razonamiento cambiará la respuesta, creo. – Brian

+0

¿quieres volver a otro procedimiento? –

+0

@Anand Thangappan: estoy llamando a este SP desde mi aplicación ASP.NET. – jams

Respuesta

49

¿Dónde está tu problema ??

para el procedimiento almacenado, basta con crear:

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

Eso es todo lo que hay.

Desde la aplicación ASP.NET, basta con crear una SqlConnection y una SqlCommand (no se olvide de establecer el 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(); 

y luego rellenar por ejemplo, a DataTable con esos datos y añádalos a, p. un GridView.

+0

Hola, ¿qué tal si necesito que esa tabla esté en un parámetro de salida declarado? ¿Se puede hacer? ¿Cuál es el tipo de datos de esa salida? –

+0

@GuillermoVarini: no, no puede enviar de vuelta una tabla completa como parámetro de salida, que actualmente no es compatible –

4

En SQL Server 2008 puede utilizar

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

o de lo simple y misma que la ejecución común

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 

que espera que su ayuda para usted

4

muy importantes son

SET NOCOUNT ON; 

en SP, en Primera línea, si hace INSERT en SP, el END SELECT no puede devolver valores.

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

O

RS.OPEN CN,RS, SQL 
+0

Esto funcionó para una situación un poco más compleja, ¡gracias! – Chisko

Cuestiones relacionadas