Подпрограмма в SQL Серверной хранимой процедуре - PullRequest
0 голосов
/ 10 апреля 2020

Может кто-нибудь поделиться со мной информацией о том, как создать подпрограмму в хранимой процедуре на SQL Сервере?

У меня есть процедуры на Oracle, которые будут вызывать подпрограмму в тех же процедурах для 50 раз в разных строках в процедуре. Теперь я хочу воссоздать ту же процедуру на SQL сервере. Не могли бы вы рассказать мне, как это сделать?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Если ваша подпрограмма выполняет модификации данных (CRUD) или вам необходимо использовать временные таблицы (#teporary_table), это должна быть хранимая процедура . В других случаях вы можете использовать функцию создания . Вы можете выбирать из различных типов функций в зависимости от их сложности и возвращаемых значений:

  • скалярная функция - возвращает одно значение
  • встроенное табличное значение - это как просмотр с параметрами (вы не можете объявляет переменные таблицы, например, один оператор SELECT) и возвращает набор строк
  • табличное значение с несколькими инструкциями - возвращает набор строк, но вы можете иметь более сложные логики c

Кроме того, в SQL Server есть SQL CLR , и вы можете создавать функции или процедуры (или, как их называют, «подпрограммы») в .net коде.

0 голосов
/ 10 апреля 2020

На SQL сервере у вас есть хранимые процедуры и табличные и скалярные функции. Еще одна удобная функция - это обычные табличные выражения.

Функции , которые можно использовать непосредственно в SQL выражениях (SELECT, INSERT, UPDATE, JOIN), так что их можно использовать повторно.

Табличная функция:

SELECT *
FROM myFunction(@UserID) as f
    INNER JOIN users AS u ON f.UserID = u.ID

Скалярная функция, которую можно вставить в SELECT часть запроса.

SELECT u.ID, myFunction(u.ID)
FROM users as u

Common табличные выражения удобны для удобства чтения:

;WITH MyCTP AS
(
    // complex SQL
)
SELECT *
FROM myTable INNER JOIN MyCTP ON...

Вы можете иметь несколько CTE перед оператором SELECT, но вы можете использовать их только в том утверждении, над которым они были объявлены.

Хранимые процедуры

Они немного болезненны в a $$, потому что вам нужно захватить результат в переменные, чтобы использовать их в вызывающей хранимой процедуре.

 DECLARE @Input INT
 DECLARE @Result INT

 EXEC myStoredProcedure @Input, @Result OUT

Если процедура выводит таблицу, она становится еще сложнее. Вам нужно использовать курсор для захвата результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...