Функція проти збереженої процедури в SQL Server


830

Я вивчав функції та зберігаються процедури досить довгий час, але не знаю, чому і коли мені слід використовувати функцію чи збережену процедуру. Вони на мене так само виглядають, можливо, тому що я якось новачок з цього приводу.

Може хтось мені скаже, чому?





3
як щодо швидкості? який швидше запускає той самий запит?
AmiNadimi

Відповіді:


709

Функції є обчисленими значеннями і не можуть виконувати постійні зміни навколишнього середовища SQL Server(тобто немає INSERTчи UPDATEзаяви не допускаються).

Функція може використовуватися вбудованими у SQLвисловлюваннях, якщо вона повертає скалярне значення, або до неї можна приєднатися, якщо вона повертає набір результатів.

Точку, яку варто відзначити в коментарях, яка узагальнює відповідь. Завдяки @Sean K Андерсон:

Функції відповідають визначенню інформатики тим, що вони ОБОВ'ЯЗКОВО повертають значення і не можуть змінювати отримані дані як параметри (аргументи). Функціям заборонено нічого змінювати, вони повинні мати принаймні один параметр, і вони повинні повертати значення. Збережені програми не повинні мати параметр, вони можуть змінювати об'єкти бази даних і не повинні повертати значення.

Як викликати SQLфункцію з процедури зберігання і коли ми використовуємо функцію замість збереженої процедури.

Привіт друзі, сьогодні ми обговоримо, коли використовувати збережену процедуру та коли використовувати функцію. У простій команді Якщо ви хочете обчислити деякі значення, і це поверне єдине значення, тому це не потрібно:

https://programmingtechtutorial.blogspot.com/2020/01/when-use-storeprocedure-and-when-use.html


13
В основному жоден DML не дозволений?
Девід Блейн

173
Функції відповідають визначенню комп'ютерних наук, оскільки вони ОБОВ'ЯЗКОВО повертають значення і не можуть змінювати отримані дані як параметри (аргументи). Функціям заборонено нічого змінювати, вони повинні мати принаймні один параметр, і вони повинні повертати значення. Збережені програми не повинні мати параметр, вони можуть змінювати об'єкти бази даних і не повинні повертати значення.
Шон Андерсон

23
Насправді, ви можете мати операції INSERT, UPDATE та DELETE для зміни змінних місцевих таблиць.
Ані

14
@Ani - Ви можете створювати і змінювати будь-яку кількість локальних змінних у функції, однак ви не можете нічого змінювати за межами області функції.
MyItchyChin

40
@SeanKAnderson функція "повинна мати принаймні один параметр" не відповідає дійсності.
laang

623

Різниця між SP та UDF наведена нижче:

+---------------------------------+----------------------------------------+
| Stored Procedure (SP)           | Function (UDF - User Defined           |
|                                 | Function)                              |
+---------------------------------+----------------------------------------+
| SP can return zero , single or  | Function must return a single value    |
| multiple values.                | (which may be a scalar or a table).    |
+---------------------------------+----------------------------------------+
| We can use transaction in SP.   | We can't use transaction in UDF.       |
+---------------------------------+----------------------------------------+
| SP can have input/output        | Only input parameter.                  |
| parameter.                      |                                        |
+---------------------------------+----------------------------------------+
| We can call function from SP.   | We can't call SP from function.        |
+---------------------------------+----------------------------------------+
| We can't use SP in SELECT/      | We can use UDF in SELECT/ WHERE/       |
| WHERE/ HAVING statement.        | HAVING statement.                      |
+---------------------------------+----------------------------------------+
| We can use exception handling   | We can't use Try-Catch block in UDF.   |
| using Try-Catch block in SP.    |                                        |
+---------------------------------+----------------------------------------+

21
Функції повинні повертати одне значення або набір.
Рафареїно

8
Це з’явилося через 3 роки, але повинно бути на початку, оскільки воно є і читабельним, і великим.
DanteTheSmith

SP може використовувати як тимчасові таблиці, так і змінні таблиці, тоді як UDF може використовувати тільки змінні таблиці. Змінні таблиці не можуть використовувати індекси. UDF можна викликати в
Людовик

190

Функції та збережені процедури служать окремим цілям. Хоча це не найкраща аналогія, функції можна розглядати буквально як будь-яку іншу функцію, яку ви використовуєте в будь-якій мові програмування, але збережені програми більше схожі на окремі програми або пакетний сценарій.

Функції зазвичай мають вихід і необов'язково входи. Потім вихід може використовуватися як вхід до іншої функції (вбудований SQL-сервер, такий як DATEDIFF, LEN тощо) або як предикат до SQL-запиту - наприклад, SELECT a, b, dbo.MyFunction(c) FROM tableабо SELECT a, b, c FROM table WHERE a = dbo.MyFunc(c).

Збережені програми використовуються для зв’язування SQL-запитів разом у транзакції та взаємодії із зовнішнім світом. Такі рамки, як ADO.NET тощо, не можуть викликати функцію безпосередньо, але вони можуть викликати збережений протокол безпосередньо.

Функції мають приховану небезпеку: вони можуть бути неправильно використані та спричинити досить неприємні проблеми з роботою: врахуйте цей запит:

SELECT * FROM dbo.MyTable WHERE col1 = dbo.MyFunction(col2)

Де MyFunction оголошено як:

CREATE FUNCTION MyFunction (@someValue INTEGER) RETURNS INTEGER
AS
BEGIN
   DECLARE @retval INTEGER

   SELECT localValue 
      FROM dbo.localToNationalMapTable
      WHERE nationalValue = @someValue

   RETURN @retval
END

Тут відбувається те, що функція MyFunction викликається для кожного рядка таблиці MyTable. Якщо MyTable має 1000 рядків, то це ще 1000 спеціальних запитів до бази даних. Аналогічно, якщо функція викликається, коли зазначено в специфіці стовпця, тоді функція буде викликана для кожного рядка, повернутого SELECT.

Тому вам потрібно бути обережними функції написання. Якщо ви вибираєте SELECT з таблиці у функції, вам потрібно запитати себе, чи можна краще виконати приєднання до системи JOIN у батьківському зберігається процесорі чи якійсь іншій конструкції SQL (наприклад, CASE ... WHEN ... ELSE ... Кінець).


2
Чи можете ви, будь ласка, детальніше розповісти про "Рамки, такі як ADO.NET і т.д. Я виконував функції з постачальниками даних ADO.NET без проблем.
Ян Кемп

24
Ви повинні викликати функцію через якийсь оператор SELECT - функцію не можна називати самостійним фрагментом коду - її потрібно викликати як частину більшого оператора SQL, навіть якщо цей оператор SQL є нічим більше ніж SELECT * from dbo.MyTableValuedFunction(). Sprocs, з іншого боку, можна викликати безпосередньо в ADO.NET, встановивши SqlCommand.CommandTypeна CommandType.StoredProcedure.
Кріс Дж

60

Відмінності між збереженими процедурами та визначеними користувачем функціями:

  • Збережені процедури не можна використовувати в операторах Select.
  • Збережені процедури підтримують відстрочену назву.
  • Збережені процедури, як правило, використовуються для виконання бізнес-логіки.
  • Збережені процедури можуть повернути будь-який тип даних.
  • Збережені процедури можуть приймати більшу кількість вхідних параметрів, ніж визначені користувачем функції. Збережені процедури можуть мати до 21000 вхідних параметрів.
  • Збережені процедури можуть виконувати Dynamic SQL.
  • Збережені процедури підтримують обробку помилок.
  • Недетерміновані функції можна використовувати в збережених процедурах.

  • Функції, визначені користувачем, можна використовувати в операторах Select.
  • Визначені користувачем функції не підтримують розділене дозвіл імені.
  • Зазначені користувачем функції зазвичай використовуються для обчислень.
  • Зазначені користувачем функції повинні повертати значення.
  • Користувацькі функції не можуть повернути зображення.
  • Зазначені користувачем функції приймають меншу кількість вхідних параметрів, ніж збережені процедури. UDF можуть мати до 1023 вхідних параметрів.
  • Тимчасові таблиці не можна використовувати у визначених користувачем функціях.
  • Зазначені користувачем функції не можуть виконувати Dynamic SQL.
  • Визначені користувачем функції не підтримують обробку помилок. RAISEERRORАБО @@ERRORне дозволено в АДС.
  • Недетерміновані функції не можна використовувати в UDF. Наприклад, GETDATE()не можна використовувати в UDF.

1
Цитувати @curiousBoy нижче ре. ще одна некредитована відповідь (від @Ankit) (<- дивіться, як я це зробив?;)): "Ви повинні були дати посилання на джерело. Це з ( blogs.msdn.microsoft.com/pradeepsvs/2014/10 / 08 /… ). Будь ласка, поважайте роботу, яку виконують інші! "
Том,

7
Блоги писалися з 8 жовтня 2014 року, і ця відповідь була написана з 2 травня 2013 р. @Tom
Kumar Manish

1
@Code Rider: Ах, вибачте! Не можу повірити, що я цього не помітив! Отже, блог скопіював вас (чи когось іншого, хто це зробив) без кредиту?
Том

GETDATE()може використовуватися у функції. Стрижка на недетермінованому не є хорошою.
PerformanceDBA

56

Напишіть визначену користувачем функцію, коли потрібно обчислити та повернути значення для використання в інших операторах SQL; писати збережену процедуру, коли ви хочете замість цього - згрупувати можливо складний набір операторів SQL. Адже це два досить різних випадки використання!


18
існують різні типи визначених користувачем функцій. Скалярні повертають лише значення; інші типи відновлення наборів результатів.
АК

44
              STORE PROCEDURE                 FUNCTION (USER DEFINED FUNCTION)    
 * Procedure can return 0, single or   | * Function can return only single value   
   multiple values.                    |
                                       |
 * Procedure can have input, output    | * Function  can have only input 
   parameters.                         |   parameters.         
                                       |
 * Procedure cannot be called from     | * Functions can be called from 
   function.                           |   procedure.
                                       |
 * Procedure allows select as well as  | * Function allows only select statement 
   DML statement in it.                |   in it.
                                       |
 * Exception can be handled by         | * Try-catch block cannot be used in a 
   try-catch block in a procedure.     |   function.
                                       |
 * We can go for transaction management| * We can't go for transaction 
   in procedure.                       |   management in function.
                                       |
 * Procedure cannot be utilized in a   | * Function can be embedded in a select 
   select statement                    |   statement.
                                       |
 * Procedure can affect the state      | * Function can not affect the state 
   of database means it can perform    |   of database means it can not    
   CRUD operation on database.         |   perform CRUD operation on 
                                       |   database. 
                                       |
 * Procedure can use temporary tables. | * Function can not use 
                                       |   temporary tables. 
                                       |
 * Procedure can alter the server      | * Function can not alter the  
   environment parameters.             |   environment parameters.
                                       |   
 * Procedure can use when we want      | * Function can use when we want
   instead is to group a possibly-     |   to compute and return a value
   complex set of SQL statements.      |   for use in other SQL 
                                       |   statements.

1
UDF можна викликати в
Людовик

24

Основна різниця

Функція повинна повертати значення, але в Збереженій процедурі це необов'язково (Процедура може повернути нульові або n значення).

Функції можуть мати для нього лише вхідні параметри, тоді як Процедури можуть мати параметри вводу / виводу.

Функція приймає один вхідний параметр, він є обов'язковим, але збережена процедура може зайняти від o до n вхідних параметрів.

Функції можна викликати з процедури, тоді як процедури не можна викликати з функції.

Попередня різниця

Процедура дозволяє в ньому оператор SELECT, а також DML (INSERT / UPDATE / DELETE), тоді як функція дозволяє в ній лише оператор SELECT.

Процедури не можна використовувати в операторі SELECT, тоді як Функція може бути вбудована в оператор SELECT.

Збережені процедури не можна використовувати в операторах SQL ніде в розділі WHERE / HAVING / SELECT, тоді як функція може бути.

Функції, які повертають таблиці, можна розглядати як інший набір рядків. Це можна використовувати в JOINs з іншими таблицями.

Вбудована функція може бути представлена ​​як представлення, яке приймає параметри і може використовуватися в JOINs та інших операціях Rowset.

Виняток може бути оброблений блоком try-catch у процедурі, тоді як блок try-catch не може бути використаний у функції.

Ми можемо перейти до управління транзакціями в процедурі, тоді як ми не можемо перейти у функцію.

джерело


25
Ви б мали дати посилання на джерело. Це з dotnet-tricks.com/Tutorial/sqlserver/… . Будь ласка, поважайте роботу, яку виконують інші!
цікавоБой

16
Це не привід не наводити посилання на джерело. Ви можете згадати в кінці цього!
цікавоБуй

2
Re. "Функція повинна повертати значення, але в Збереженій процедурі це необов'язково ....": Я б уточнив, що: "Функції повинні повертати одне і лише одне значення (що повинно бути виконано за допомогою Returnsключового слова та повинно бути типом Скаляр або Таблиця) , але збережені процедури можуть необов'язково повертати: a) 1 Intтип коду результату через Returnвиписку та / або b) 1+ параметри (включаючи Cursorтип) за допомогою Outputключового слова та / або c) Selectнабір рядків 1+ за допомогою виписки. Якщо встановлено лише 1 рядок повертається, він може бути використаний як аргумент "Execute_statement" "Вставити в" Заява ".
Том

20

визначена користувачем функція є важливим інструментом, доступним програмісту на сервері sql. Ви можете використовувати його вбудовано в операторі SQL так

SELECT a, lookupValue(b), c FROM customers 

де lookupValueбуде АДС. Такий функціонал неможливий при використанні збереженої процедури. У той же час ви не можете робити певні речі всередині АДС. Основне, що тут слід пам'ятати, це те, що АДС:

  • не може створити постійні зміни
  • не може змінити дані

збережена процедура може робити це.

Для мене використання UDF вбудованому режимі є найважливішим використанням UDF.


14

Збережені процедури використовуються як сценарії . Вони виконують ряд команд для вас, і ви можете запланувати їх виконання на певний час. Зазвичай виконує декілька операторів DML, таких як INSERT, UPDATE, DELETE тощо або навіть SELECT.

Функції використовуються як методи. Ви щось передаєте, і це повертає результат. Повинен бути маленьким і швидким - чи робить це на льоту. Зазвичай використовується в операторі SELECT.


2
Це хороший підсумок двох, швидких і брудних способів їх думати.
Ерік Бішард

2
Справді гарне резюме. Інші відповіді зосереджуються на теоретичній різниці двох, в той час як я не знаю, коли використовувати на практиці.
jf328

8

Збережена процедура:

  • Це як мініатюрна програма в SQL Server.
  • Він може бути таким же простим, як оператор select, або складним, як довгий сценарій, який додає, видаляє, оновлює та / або зчитує дані з декількох таблиць у базі даних.
  • (Може реалізувати петлі та курсори, які дозволяють вам працювати з меншими результатами або виконувати рядкові операції з рядками.)
  • Слід викликати, використовуючи EXECабоEXECUTE заяви.
  • Повертає змінні таблиці, але ми не можемо їх використовувати OUT параметр.
  • Підтримує транзакції.

Функція:

  • Не можна використовувати для оновлення, видалення або додавання записів до бази даних.
  • Просто повертає одне значення або значення таблиці.
  • Може використовуватися лише для вибору записів. Однак його можна назвати дуже легко із стандартного SQL, наприклад:

    SELECT dbo.functionname('Parameter1')

    або

    SELECT Name, dbo.Functionname('Parameter1') FROM sysObjects
  • Для простих операцій вибору багаторазового використання функції можуть спростити код. Просто будьте обережні при використанні JOINпропозицій у своїх функціях. Якщо у вашій функції є JOINпункт, і ви викликаєте його з іншого оператора select, який повертає кілька результатів, цей виклик функції буде робити JOIN ці таблиці разом для кожного рядка, що повертається в наборі результатів. Тому, хоча вони можуть бути корисними для спрощення певної логіки, вони також можуть бути вузьким місцем продуктивності, якщо вони не використовуються належним чином.

  • Повертає значення за допомогою OUTпараметра.
  • Не підтримує транзакції.

8

Функція, визначена користувачем.

  1. Функція повинна повертати значення.
  2. Дозволятиме лише оператори Select, це не дозволить нам використовувати оператори DML.
  3. Це дозволить лише вхідні параметри, не підтримує вихідні параметри.
  4. Це не дозволить нам використовувати пробні блоки.
  5. Операції не дозволені в межах функцій.
  6. Ми можемо використовувати тільки змінні таблиці, це не дозволить використовувати тимчасові таблиці.
  7. Збережені процедури не можна викликати з функції.
  8. Функції можна викликати з оператора select.
  9. UDF може бути використаний у приєднаному пункті як набір результатів.

Збережена процедура

  1. Збережена процедура може повернути значення або не повернути їх.
  2. Може мати оператори вибору, а також оператори DML, такі як вставлення, оновлення, видалення тощо
  3. Він може мати як вхідні, так і вихідні параметри.
  4. Для обробки винятків ми можемо використовувати блоки спробувати.
  5. Можна використовувати транзакції в межах Збережених процедур.
  6. Може використовувати як змінні таблиці, так і тимчасову таблицю в ній.
  7. Збережені процедури можуть викликати функції.
  8. Процедури не можна викликати з операторів Вибір / Де / Маючи тощо. Оператор Execute / Exec може використовуватися для виклику / виконання збереженої процедури.
  9. Процедури не можна використовувати в пункті приєднання

6

Вирішити, коли використовувати, які наступні моменти можуть допомогти -

  1. Збережені процедури не можуть повернути змінну таблиці, де функція може це зробити.

  2. Ви можете використовувати збережені процедури для зміни параметрів серверного середовища там, де використання функцій неможливо.

ура


6

Функції SQL Server, як і курсори, повинні використовуватися як ваша остання зброя! У них є проблеми з продуктивністю, і тому слід максимально уникати використання функції на основі таблиці. Якщо говорити про продуктивність, це говорити про таблицю з більш ніж 1 000 000 записів, розміщених на сервері на апараті середнього класу; інакше вам не потрібно турбуватися про ефективність, викликану функціями.

  1. Ніколи не використовуйте функцію для повернення набору результатів до зовнішнього коду (наприклад, ADO.Net)
  2. Використовуйте комбіновані перегляди / збережені програми якомога більше. ви можете відновитись із майбутніми проблемами з ростом продуктивності, скориставшись пропозиціями DTA (радник з налаштування бази даних), який вам надасть (наприклад, індексовані погляди та статистику) - інколи!

Для подальшого ознайомлення див: http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html


1
Дякую. Сьогодні написав функцію для виклику в межах запиту для заповнення значень для одного стовпця. Виконання бігало більше 3 хвилин, перш ніж я зупинив його. З'ясував СПІЛЬНИЙ спосіб зробити це. Виконати закінчено за 15 секунд. (Набір даних склав 3456 рядків). Велика продуктивність різн.
VISQL

редагувати: виконувати обробку між 15 та 50 секундами залежно від того, у якому стовпці я "ЗАМОВИТИ ПО" (Набір даних склав 3456 рядків). Велика різниця в продуктивності.
VISQL

Різниця в продуктивності може мати коріння у різних типах стовпців, за якими ви упорядковуєте результат. SQL Server працює набагато краще, ніж цифри, ніж символьні дані. Ви можете використовувати DTA для запиту на 50 секунд і побачити, чи може він створити якісь пропозиції щодо статистики / покажчиків, щоб зробити запит трохи швидшим.
Ахілл

1
Я не впевнений, що було надано достатньо доказів, щоб сказати, що це має бути в крайньому випадку. Функцію можна розглядати як параметризований вигляд, над яким можна керувати далі. Наприклад, ви хочете приєднати клієнтів до замовлень, але тільки для штату Мічиган. Ви створюєте функцію customerOrders (@StateCode), яка приєднується до вартості клієнта лише для однієї держави. Тоді я можу додатково працювати з цим набором як Select FirstName, LastName, OrderTotal, StoreName From CustomerOrders ('MI') INNER JOIN INC Store in Stores.StoreID = Orders.StoreID WHERE OrderTotal> 100; Це буде біль із SP, оскільки ви повинні тимчасово копіювати.
MPavlak

Скільки записів у вас у цій таблиці? Якщо ваше обладнання поводиться з ним належним чином, вам не потрібно буде турбуватися про вибір зброї. Ложка може виконати роботу, коли важко розбити меч; ця твердість називається ТЕХНІЧНИМ!
Ахілл

3

Почніть з функцій, які повертають єдине значення. Приємно те, що ви можете помістити часто використовуваний код у функцію та повернути їх як стовпець у наборі результатів.

Потім ви можете використовувати функцію для параметризованого списку міст. dbo.GetCitiesIn ("NY"), який повертає таблицю, яку можна використовувати як об'єднання.

Це спосіб організації коду. Знання, коли щось можна використовувати багаторазово, а коли це марно витрачає час, - це щось, що лише отримується шляхом спроб, помилок та досвіду.

Також функції є хорошою ідеєю в SQL Server. Вони швидші і можуть бути досить потужними. Вмикання та прямий вибір. Обережно не зловживати.


3

Ось практична причина віддати перевагу функції над збереженими процедурами. Якщо у вас є збережена процедура, яка потребує результатів іншої збереженої процедури, ви повинні використовувати оператор insert-exec. Це означає, що вам потрібно створити темп-таблицю і використовувати execоператор, щоб вставити результати збереженої процедури в таблицю темп. Це безладно. Одна з проблем полягає в тому, що вставити-execs не можна вкладати .

Якщо ви застрягли зі збереженими процедурами, які викликають інші збережені процедури, ви можете зіткнутися з цим. Якщо вкладена збережена процедура просто повертає набір даних, її можна замінити функцією, яка оцінюється за таблицею, і ви більше не отримаєте цю помилку.

( це ще одна причина, по якій ми не повинні виключати бізнес-логіку з бази даних )


2
  • Функція обов'язково повертає значення, поки це не зберігається процедура.
  • Виберіть оператори, прийняті лише в UDF, тоді як операції DML не потрібні.
  • Збережена процедура приймає будь-які оператори, а також оператори DML.
  • UDF дозволяє лише входи, а не виходи.
  • Збережена процедура передбачає і входи, і виходи.
  • Блоки лову не можна використовувати в UDF, але їх можна використовувати в збереженій процедурі.
  • У функціях UDF не допускаються транзакції, але в збереженій процедурі вони дозволені.
  • У UDF можуть використовуватися лише змінні таблиці, а не тимчасові таблиці.
  • Збережена процедура дозволяє використовувати як змінні таблиці, так і тимчасові таблиці.
  • UDF не дозволяє викликати збережені процедури з функцій, тоді як збережені процедури дозволяють викликати функції.
  • UDF використовується в підключенні, тоді як збережені процедури не можуть бути використані в підключенні.
  • Збережена процедура завжди дозволить повернутися до нуля. АДС, навпаки, має значення, які повинні повернутися до заданої точки.

1
  • Функції можна використовувати в операторі select, коли процедури не можуть.

  • Збережена процедура приймає і вхідні, і вихідні параметри, але Функції приймає лише вхідні параметри.

  • Функції не можуть повертати значення тексту тексту, ntext, зображення та часових позначок, де це можливо.

  • Функції можна використовувати як визначені користувачем типи даних у таблиці створення, але процедури не можуть.

*** Напр .: -створити table <tablename>(name varchar(10),salary getsal(name))

Тут getal - це визначена користувачем функція, яка повертає тип зарплати, коли створюється таблиця, не виділяється сховище для типу зарплати, а функція getal також не виконується, але коли ми отримуємо деякі значення з цієї таблиці, виконується функція getal, і Тип повернення повертається як набір результатів.


1

Я усвідомлюю, що це дуже давнє запитання, але я не бачу жодного важливого аспекту, згаданого в жодній із відповідей: включення до плану запитів.

Функції можуть бути ...

  1. Скаляр:

    CREATE FUNCTION ... RETURNS scalar_type AS BEGIN ... END

  2. Таблиця з різними заявами:

    CREATE FUNCTION ... RETURNS @r TABLE(...) AS BEGIN ... END

  3. Вбудована таблична вартість:

    CREATE FUNCTION ... RETURNS TABLE AS RETURN SELECT ...

Третій вид (вбудований в табличну таблицю) оптимізатором запитів трактується по суті як (параметризовані) перегляди, а це означає, що посилання на функцію з вашого запиту схоже на те, що копіювання вставляється в тіло SQL функції (без власне копіювання), що веде до наступних переваг:

  • Планувальник запитів може оптимізувати виконання вбудованої функції так само, як і будь-який інший підзапит (наприклад, усунути невикористані стовпці, натиснути предикати вниз, вибрати різні стратегії JOIN тощо).
  • Поєднання декількох вбудованих функцій не вимагає матеріалізації результату від першої, перш ніж подавати її на наступну.

Вищезазначене може призвести до значної економії продуктивності, особливо при поєднанні декількох рівнів функцій.


ПРИМІТКА. Схоже, SQL Server 2019 також введе певну форму скалярної функції .


-2

У SQL Server функції та збережена процедура є двома різними типами сутностей.

Функція: У базі даних SQL Server функції використовуються для виконання деяких дій, і дія негайно повертає результат. Функції бувають двох типів:

  1. Система визначена

  2. Визначений користувачем

Збережені процедури: у SQL Server збережені процедури зберігаються на сервері, і це може бути повернути нульове, одиничне та множинне значення. Збережені процедури бувають двох типів:

  1. Процедури, що зберігаються в системі
  2. Процедури, визначені користувачем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.