2011-04-09 17 views
29

To bardzo proste pytanie.Jak zwrócić tabelę z procedury składowanej?

Próbuję zwrócić tablicę z procedury przechowywanej, jak

select * from emp where [email protected] 

Chcę zwrócić ten wynik zapytania w formie tabeli. Muszę to zrobić poprzez procedurę przechowywaną.

+0

Dlaczego musisz wyniki jak stół? Twoje rozumowanie zmieni odpowiedź, którą myślę. – Brian

+0

czy chcesz wrócić do innej procedury !!! –

+0

@Anand Thangappan: Nazwałem to SP z mojej aplikacji ASP.NET. – jams

Odpowiedz

49

Gdzie jest twój problem?

Dla procedury przechowywanej, wystarczy utworzyć:

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

To wszystko tam jest.

z aplikacji ASP.NET, wystarczy utworzyć SqlConnection a SqlCommand (nie zapomnij ustawić 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(); 

a następnie wypełnić np a DataTable z tymi danymi i powiązać je z np. GridView.

+0

Cześć, co jeśli potrzebuję, aby ta tabela była w zadeklarowanym parametrze wyjściowym. czy można to zrobić? który jest typem danych tego wyjścia? –

+0

@GuillermoVarini: nie, nie można odesłać całej tabeli jako parametru wyjściowego, który obecnie nie jest obsługiwany –

4

W SQL Server 2008 można użyć

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

albo prosta i taka sama jak wspólnej realizacji

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 

Mam nadzieję swoją pomoc do was

4

bardzo ważne m.in.

SET NOCOUNT ON; 

do SP, W pierwszej linii, , jeśli wykonasz INSERT w SP, END SELECT nie może zwrócić wartości.

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

LUB

RS.OPEN CN,RS, SQL 
+0

To działało na nieco bardziej złożoną sytuację, dzięki! – Chisko

Powiązane problemy