Табличні функції з безліччю інструкцій

Користувальницькі табличні функції з безліччю інструкцій комбінують здатність скалярних функцій містити складний програмний код із здатністю впроваджених табличних функцій повертати результуючий набір даних Цей тип функцій створює табличну змінну, а потім заповнює її в тілі функції Сформована таблиця згодом повертається функцією і може використовуватися в інструкціях SELECT

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

Нова команда APPLY може використовуватися з одними табличними функціями з безліччю інструкцій точно так само, як з впровадженими

Створення табличних функцій з безліччю інструкцій

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

CREATE FUNCTION імя_функциі (вкодние_параметри)

RETURNS @ імя_та бліци TABLE (стовпці)

AS

BEGIN

Програмний код заповнення табличній змінної RETURN END

Наступна процедура дозволяє створити табличну користувача функцію з безліччю інструкцій, яка повертає основний результуючий набір даних

1 На початку інструкції CREATE FUNCTION створюється таблична змінна @ Price

2 У тілі функції дві інструкції INSERT заповнюють змінну @ Price

3 Після виконання функції значення табличній змінної @ Price передається в зовнішнє процедуру як результат функції

Функція f PriceAvg повертає всі ціни з таблиці Price і середнє значення ціни для кожного товару:

USE OBXKites go

CREATE FUNCTION fPriceAvg()

RETURNS @Price TABLE (Code CHAR(10),

EffectiveDate DATETIME,

Price MONEY)

AS

BEGIN

INSERT @Price (Code, EffectiveDate, Price)

SELECT Code, EffectiveDate, Price FROM Product JOIN Price

ON PriceProductID = ProductProductID INSERT @Price (Code, EffectiveDate, Price)

SELECT Code, Null, Avg(Price)

FROM Product JOIN Price

ON PriceProductID = ProductProductID GROUP BY Code

RETURN

END

Виклик функції

Для виконання функції до неї проводиться звернення в реченні FROM інструкції SELECT:

SELECT *

FROM dbofPriceAvg()

Результат виконання інструкції:

Code EffectiveDate                                 Price

1001 2001-05-01 00:00:00000 149500 1001 2002-06-01 00:00:00000 159500

1001&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 2002-07-20 00:00:00000 179500

Резюме

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

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

Програмний код Т-SQL може бути укладений в оболонку збережених процедур, призначених для користувача функцій і тригерів У наступному розділі ми розглянемо тригери-особливі процедури Т-SQL, які автоматично запускаються на виконання при виникненні подій рівня таблиці

Реалізація тригерів

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

Користувачі не можуть обійти тригери, і якщо тригер посилає повідомлення, користувачі навіть не здогадуються про його існування

Розробка тригерів передбачає знайомство з низкою питань, повязаних з SQL Server, у тому числі з порядком виконання транзакцій, блокуваннями, мовою Т-SQL і збереженими процедурами Це є необхідною умовою створення дієвих тригерів Тригери складаються з декількох унікальних елементів і вимагають ретельного планування У той же час вони забезпечують гарантоване виконання складних правил бізнес-логіки та перевірки даних

Деякі адміністратори баз даних уникають використання тригерів, оскільки ті за своєю природою привязані до однієї платформі якщо база даних переноситься на іншу платформу, то більшу їх частину доведеться переписати Також тригери дещо знижують продуктивність додатків На захист тригерів можна сказати наступне Якщо деякий правило занадто складне для обмежень, то воно може бути реалізовано тільки в тригерах Правила бізнес-логіки, реалізовані поза SQL Server, – швидше виключення, ніж правило Якщо тригер неграмотно написаний, він буде робити істотний вплив на продуктивність Водночас добре написаний тригер гарантує забезпечення цілісності даних і гарній продуктивності

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*