#sql-server
#sql-сервер
Вопрос:
Я видел в Oracle SQL, что есть что-то, что называется SYS_REFCURSOR
, которое используется в SP для получения a recordset
из таблицы
Я хочу сделать то же самое в SQL Server, чтобы я мог с помощью SP получить набор записей определенной таблицы. Я много искал похожие решения, но все, что я видел, связано с Oracle SQL.
Какие-либо предложения, пожалуйста?
PS Чтобы быть более понятным, я хочу просто использовать SP для выбора всех записей вместо обычного запроса.
т.е. вместо использования:
SELECT * FROM EMP_DEPARTMENT
используйте SP, чтобы сделать то же самое.
Ответ №1:
Предполагая, что вы имеете в виду хранимую процедуру с SP, вы можете сделать это :
create procedure dbo.spMyProcedure as
begin
set nocount on
select * from emp_department
end;
чем вы можете это сделать :
exec dbo.spMyProcedure
Это то, что вы имеете в виду?
Комментарии:
1. Точно, я думал об этом коде и уже сделал это, но я подумал, что это неэффективный способ сделать это, пожалуйста, еще один вопрос, как я могу получить результат этой процедуры в ASP.NET Код на C #?
2. Если все, что вы делаете в хранимой процедуре, это select * из emp_department, то это не более эффективно, чем прямой вызов select . В этом случае вам было бы лучше создать представление вместо процедуры.
3. Получение результата в c # происходит так же, как и при использовании обычного оператора select . Поместите ‘exec spMyProcedure’ в SqlCommand и просто выполните adapter . Fill(), как вы бы сделали с обычным select
Ответ №2:
В SQL Server вы можете просто инкапсулировать SELECT
запрос в хранимую процедуру (используя *
только в качестве примера, поскольку лучше всего использовать явный список столбцов):
CREATE PROC dbo.GetEmployeeDepartments
AS
SELECT * FROM EMP_DEPARTMENT;
GO
Клиентский API SQL Server передаст результат в виде набора результатов с быстрой переадресацией, доступного только для чтения, где можно использовать отдельные строки.