1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Функции встроенные</a><ul><li><a>Ранжирующие</a></li>
1
<ul><li><a>Функции встроенные</a><ul><li><a>Ранжирующие</a></li>
2
<li><a>Агрегатные</a></li>
2
<li><a>Агрегатные</a></li>
3
<li><a>Аналитические</a></li>
3
<li><a>Аналитические</a></li>
4
<li><a>NEXT VALUE FOR (T-SQL)</a></li>
4
<li><a>NEXT VALUE FOR (T-SQL)</a></li>
5
<li><a>Наборы строк</a></li>
5
<li><a>Наборы строк</a></li>
6
<li><a>Встроенные скалярные</a></li>
6
<li><a>Встроенные скалярные</a></li>
7
<li><a>Оконные</a><ul><li><a>Инструкция SELECT - предложение OVER (T-SQL)</a></li>
7
<li><a>Оконные</a><ul><li><a>Инструкция SELECT - предложение OVER (T-SQL)</a></li>
8
</ul></li>
8
</ul></li>
9
<li><a>Детерминированные и недетерминированные</a></li>
9
<li><a>Детерминированные и недетерминированные</a></li>
10
<li><a>Параметры сортировки</a></li>
10
<li><a>Параметры сортировки</a></li>
11
</ul></li>
11
</ul></li>
12
<li><a>Функции, определяемые пользователем</a><ul><li><a>Создание и выполнение</a><ul><li><a>Инструкция CREATE FUNCTION</a></li>
12
<li><a>Функции, определяемые пользователем</a><ul><li><a>Создание и выполнение</a><ul><li><a>Инструкция CREATE FUNCTION</a></li>
13
</ul></li>
13
</ul></li>
14
<li><a>Скалярные в T-SQL</a></li>
14
<li><a>Скалярные в T-SQL</a></li>
15
<li><a>Вызов функций, которые определяют пользователи</a></li>
15
<li><a>Вызов функций, которые определяют пользователи</a></li>
16
<li><a>Возвращающие таблицу</a><ul><li><a>Инструкция APPLY</a></li>
16
<li><a>Возвращающие таблицу</a><ul><li><a>Инструкция APPLY</a></li>
17
</ul></li>
17
</ul></li>
18
<li><a>Опции</a></li>
18
<li><a>Опции</a></li>
19
<li><a>Параметры, возвращающие таблицу</a></li>
19
<li><a>Параметры, возвращающие таблицу</a></li>
20
<li><a>Изменение и удаление UDF</a></li>
20
<li><a>Изменение и удаление UDF</a></li>
21
</ul></li>
21
</ul></li>
22
</ul><p>В SQL (Structured Query Language) используется огромное множество функций. Статья посвящена особенностям их создания и использования. Изучайте материал или освежайте свои знания. Правильное применение алгоритмов их создания и применения поможет стать первоклассным высокооплачиваемым специалистом, востребованным на рынке труда.</p>
22
</ul><p>В SQL (Structured Query Language) используется огромное множество функций. Статья посвящена особенностям их создания и использования. Изучайте материал или освежайте свои знания. Правильное применение алгоритмов их создания и применения поможет стать первоклассным высокооплачиваемым специалистом, востребованным на рынке труда.</p>
23
<p>В MS SQL разрешено использование как функций, предоставляемых самой системой (встроенных), так и созданных пользователями (пользовательских). Рассмотрим подробнее различные категории вышеперечисленных функций.</p>
23
<p>В MS SQL разрешено использование как функций, предоставляемых самой системой (встроенных), так и созданных пользователями (пользовательских). Рассмотрим подробнее различные категории вышеперечисленных функций.</p>
24
<h2>Функции встроенные</h2>
24
<h2>Функции встроенные</h2>
25
<p>В SQL встроено огромное множество функций. К ним относятся:</p>
25
<p>В SQL встроено огромное множество функций. К ним относятся:</p>
26
<ul><li>строковые - для работы со строками;</li>
26
<ul><li>строковые - для работы со строками;</li>
27
<li>числовые - для работы с числами;</li>
27
<li>числовые - для работы с числами;</li>
28
<li>даты - для работы с датами и временем;</li>
28
<li>даты - для работы с датами и временем;</li>
29
<li>расширенные.</li>
29
<li>расширенные.</li>
30
</ul><h3>Ранжирующие</h3>
30
</ul><h3>Ранжирующие</h3>
31
<p>В MS SQL функции, которые всем строкам внутри секций возвращают ранжирующие значения, называются ранжирующими. В зависимости от того, какого типа функции используются, значения определенных строк могут совпадать или нет.</p>
31
<p>В MS SQL функции, которые всем строкам внутри секций возвращают ранжирующие значения, называются ранжирующими. В зависимости от того, какого типа функции используются, значения определенных строк могут совпадать или нет.</p>
32
<p>Такие функции относятся к недетерминированным.</p>
32
<p>Такие функции относятся к недетерминированным.</p>
33
<h3>Агрегатные</h3>
33
<h3>Агрегатные</h3>
34
<p>Функции, которые производят вычислительные действия на наборах значений и возвращающие одиночные показатели, называются агрегатными. В них не учитываются показатели NULL, за исключением лишь COUNT(*). Довольно часто их применяют в выражении GROUP BY внутри инструкции SELECT.</p>
34
<p>Функции, которые производят вычислительные действия на наборах значений и возвращающие одиночные показатели, называются агрегатными. В них не учитываются показатели NULL, за исключением лишь COUNT(*). Довольно часто их применяют в выражении GROUP BY внутри инструкции SELECT.</p>
35
<p>Они могут использоваться в:</p>
35
<p>Они могут использоваться в:</p>
36
<ul><li>команде HAVING в SELECT;</li>
36
<ul><li>команде HAVING в SELECT;</li>
37
<li>списках выбора.</li>
37
<li>списках выбора.</li>
38
</ul><p>Также они могут сочетаться с предложениями:</p>
38
</ul><p>Также они могут сочетаться с предложениями:</p>
39
<ul><li>GROUP BY - для осуществления статистических расчетов, производимых на основании категорий строк;</li>
39
<ul><li>GROUP BY - для осуществления статистических расчетов, производимых на основании категорий строк;</li>
40
<li>OVER, чтобы на основании заданной амплитуды значений найти статистическое. Оно не может использоваться вслед за функциями GROUPING, GROUPING_ID, STRING_AGG.</li>
40
<li>OVER, чтобы на основании заданной амплитуды значений найти статистическое. Оно не может использоваться вслед за функциями GROUPING, GROUPING_ID, STRING_AGG.</li>
41
</ul><p>Агрегатные функции для одних и тех же комплектов входящих показателей постоянно будут возвращать одинаковый итог. Потому все они относятся к детерминированным.</p>
41
</ul><p>Агрегатные функции для одних и тех же комплектов входящих показателей постоянно будут возвращать одинаковый итог. Потому все они относятся к детерминированным.</p>
42
<h3>Аналитические</h3>
42
<h3>Аналитические</h3>
43
<p>В MSSQL функции данной категории производят вычисления стат. значений по группам строк. Аналитические отличаются от агрегатных тем, что первые способны возвращать по несколько строк для каждой группы.</p>
43
<p>В MSSQL функции данной категории производят вычисления стат. значений по группам строк. Аналитические отличаются от агрегатных тем, что первые способны возвращать по несколько строк для каждой группы.</p>
44
<p>Они используются для определения:</p>
44
<p>Они используются для определения:</p>
45
<ul><li>скользящих средних;</li>
45
<ul><li>скользящих средних;</li>
46
<li>доли в процентах;</li>
46
<li>доли в процентах;</li>
47
<li>промежуточных результатов;</li>
47
<li>промежуточных результатов;</li>
48
<li>первых N результатов в группах.</li>
48
<li>первых N результатов в группах.</li>
49
</ul><h3>NEXT VALUE FOR (T-SQL)</h3>
49
</ul><h3>NEXT VALUE FOR (T-SQL)</h3>
50
<p>Она создает номер последовательности из определенного объекта последовательности. Может применяться в хранимых процедурах и триггерах.</p>
50
<p>Она создает номер последовательности из определенного объекта последовательности. Может применяться в хранимых процедурах и триггерах.</p>
51
<p>NEXT VALUE FOR относится к недетерминированным функциям и допускается лишь при правильном определении номера из последовательности, которая формируется.</p>
51
<p>NEXT VALUE FOR относится к недетерминированным функциям и допускается лишь при правильном определении номера из последовательности, которая формируется.</p>
52
<h3>Наборы строк</h3>
52
<h3>Наборы строк</h3>
53
<p>Они отвечают за возврат объектов, которые могут быть применены таким же образом, как в SQL используются ссылки табличные.</p>
53
<p>Они отвечают за возврат объектов, которые могут быть применены таким же образом, как в SQL используются ссылки табличные.</p>
54
<h3>Встроенные скалярные</h3>
54
<h3>Встроенные скалярные</h3>
55
<p>Те функции, которые выполняют обработку и возвращают одиночные значения, называют скалярными. Могут использоваться везде, где только могут допускаться выражения.</p>
55
<p>Те функции, которые выполняют обработку и возвращают одиночные значения, называют скалярными. Могут использоваться везде, где только могут допускаться выражения.</p>
56
<p>Они делятся на следующие категории функций:</p>
56
<p>Они делятся на следующие категории функций:</p>
57
<ul><li>конфигурации - отвечают за возврат данных о действующих конфигурациях;</li>
57
<ul><li>конфигурации - отвечают за возврат данных о действующих конфигурациях;</li>
58
<li>преобразования - поддерживают приведение и преобразовывают данные разных типов;</li>
58
<li>преобразования - поддерживают приведение и преобразовывают данные разных типов;</li>
59
<li>работы с курсорами - отвечают за возврат информации о курсорах;</li>
59
<li>работы с курсорами - отвечают за возврат информации о курсорах;</li>
60
<li>ф-ций и типов данных даты и времени - производят операции над исходящими значениями дата/ время, отвечают за возврат значений строк и чисел, вместе с датой и временем;</li>
60
<li>ф-ций и типов данных даты и времени - производят операции над исходящими значениями дата/ время, отвечают за возврат значений строк и чисел, вместе с датой и временем;</li>
61
<li>JSON - работают с данными JSON (выполняют запросы, проверку, вносят изменения);</li>
61
<li>JSON - работают с данными JSON (выполняют запросы, проверку, вносят изменения);</li>
62
<li>логические - осуществляют логические операции;</li>
62
<li>логические - осуществляют логические операции;</li>
63
<li>математические - производят вычисления, которые основаны на числах, что были переданы в качестве аргументов и возвращают значения в числах;</li>
63
<li>математические - производят вычисления, которые основаны на числах, что были переданы в качестве аргументов и возвращают значения в числах;</li>
64
<li>метаданных - отвечают за возврат данных как о самих базах данных (БД), так и о принадлежащих им объектах;</li>
64
<li>метаданных - отвечают за возврат данных как о самих базах данных (БД), так и о принадлежащих им объектах;</li>
65
<li>безопасности - возвращают информацию о пользователях и какими ролями они наделены;</li>
65
<li>безопасности - возвращают информацию о пользователях и какими ролями они наделены;</li>
66
<li>строковые - выполняют операции со строковыми входными значениями (char либо varchar) и возвращают значения (в виде строк или чисел);</li>
66
<li>строковые - выполняют операции со строковыми входными значениями (char либо varchar) и возвращают значения (в виде строк или чисел);</li>
67
<li>системные - выполняют операции над разными объектами, значениями, параметрами экземпляров SQL Server и возвращают информацию о них;</li>
67
<li>системные - выполняют операции над разными объектами, значениями, параметрами экземпляров SQL Server и возвращают информацию о них;</li>
68
<li>системные статистические - возвращают статистические данные о системе;</li>
68
<li>системные статистические - возвращают статистические данные о системе;</li>
69
<li>обработки текстов и изображений - выполняют различные операции над текстовыми, графическими значениями, столбцами и возвращают данные о них.</li>
69
<li>обработки текстов и изображений - выполняют различные операции над текстовыми, графическими значениями, столбцами и возвращают данные о них.</li>
70
</ul><h3>Оконные</h3>
70
</ul><h3>Оконные</h3>
71
<p>В начале данной функции всегда находится оператор OVER. Настройка осуществляется при участии инструкций PARTITION BY, ORDER BY и ROWS. Их реализация стала возможна начиная со SQL Server 2005.</p>
71
<p>В начале данной функции всегда находится оператор OVER. Настройка осуществляется при участии инструкций PARTITION BY, ORDER BY и ROWS. Их реализация стала возможна начиная со SQL Server 2005.</p>
72
<p>Преимущества их использования:</p>
72
<p>Преимущества их использования:</p>
73
<ul><li>возвращают такое же количество значений, сколько было получено на входе, а не уменьшают число строк;</li>
73
<ul><li>возвращают такое же количество значений, сколько было получено на входе, а не уменьшают число строк;</li>
74
<li>могут обращаться к иным строкам;</li>
74
<li>могут обращаться к иным строкам;</li>
75
<li>вычисляют скользящие средние и кумулятивные суммы;</li>
75
<li>вычисляют скользящие средние и кумулятивные суммы;</li>
76
<li>дают больше свободы по сравнению с использованием оператора JOIN.</li>
76
<li>дают больше свободы по сравнению с использованием оператора JOIN.</li>
77
</ul><h4>Инструкция SELECT - предложение OVER (T-SQL)</h4>
77
</ul><h4>Инструкция SELECT - предложение OVER (T-SQL)</h4>
78
<p>Данная инструкция выступает в качестве определяющей секционирование и урегулирование набора строчек до того, как будет применена соответствующая оконная функция. Так предложение OVER указывает окно либо внутри результирующих наборов Queries - набор строк, который определяет пользователь. После этого оконная функция производит вычисление значений для каждой строчки в окне.</p>
78
<p>Данная инструкция выступает в качестве определяющей секционирование и урегулирование набора строчек до того, как будет применена соответствующая оконная функция. Так предложение OVER указывает окно либо внутри результирующих наборов Queries - набор строк, который определяет пользователь. После этого оконная функция производит вычисление значений для каждой строчки в окне.</p>
79
<p>Можно применяться вместе с функциями для нахождения стат. значений.</p>
79
<p>Можно применяться вместе с функциями для нахождения стат. значений.</p>
80
<h3>Детерминированные и недетерминированные</h3>
80
<h3>Детерминированные и недетерминированные</h3>
81
<p>Все встроенные функции бывают:</p>
81
<p>Все встроенные функции бывают:</p>
82
<ul><li>детерминированные - для входящих значений они постоянно возвращают один и тот же результат;</li>
82
<ul><li>детерминированные - для входящих значений они постоянно возвращают один и тот же результат;</li>
83
<li>недетерминированными - для одних и тех же исходящих значений возвращают разные результаты.</li>
83
<li>недетерминированными - для одних и тех же исходящих значений возвращают разные результаты.</li>
84
</ul><h3>Параметры сортировки</h3>
84
</ul><h3>Параметры сортировки</h3>
85
<p>Параметры сортировки:</p>
85
<p>Параметры сортировки:</p>
86
<ul><li>входных строк для строчек вывода применяют те же SQL функции, которые вводят и выдают символьные строки;</li>
86
<ul><li>входных строк для строчек вывода применяют те же SQL функции, которые вводят и выдают символьные строки;</li>
87
<li>при выводе для текущей БД по умолчанию используют такие ф-ции, которые обрабатывают не символьные исходные данные, а возвращают символьные строчки;</li>
87
<li>при выводе для текущей БД по умолчанию используют такие ф-ции, которые обрабатывают не символьные исходные данные, а возвращают символьные строчки;</li>
88
<li>для строк вывода на основе правил очередности параметров сортировки задают функции, которые в качестве исходных обрабатывают указанное число символьных строк и возвращают символьную строчку.</li>
88
<li>для строк вывода на основе правил очередности параметров сортировки задают функции, которые в качестве исходных обрабатывают указанное число символьных строк и возвращают символьную строчку.</li>
89
</ul><h2>Функции, определяемые пользователем</h2>
89
</ul><h2>Функции, определяемые пользователем</h2>
90
<p>В каждом случае функции возвращают одно значение, чем и отличаются от хранимых процедур. Особый интерес вызывают UDF. Это функции, которые пользователь определяет самостоятельно (UDF - User Defined Functions). В Microsoft SQL предоставленные системой встроенные функции можно расширять, создавая самостоятельно пользовательские - UDF.</p>
90
<p>В каждом случае функции возвращают одно значение, чем и отличаются от хранимых процедур. Особый интерес вызывают UDF. Это функции, которые пользователь определяет самостоятельно (UDF - User Defined Functions). В Microsoft SQL предоставленные системой встроенные функции можно расширять, создавая самостоятельно пользовательские - UDF.</p>
91
<p>Они получают параметры (от 0 и более) и возвращают скалярное значение либо таблицу. Для входящих параметров может использоваться любой тип данных. Исключение составляют timestamp, cursor, table. </p>
91
<p>Они получают параметры (от 0 и более) и возвращают скалярное значение либо таблицу. Для входящих параметров может использоваться любой тип данных. Исключение составляют timestamp, cursor, table. </p>
92
<p>Различают несколько типов UDF:</p>
92
<p>Различают несколько типов UDF:</p>
93
<ul><li>скалярные - аналогичны со скалярными встроенными;</li>
93
<ul><li>скалярные - аналогичны со скалярными встроенными;</li>
94
<li>возвращающие табличное значение - возвращают итог инструкции SELECT;</li>
94
<li>возвращающие табличное значение - возвращают итог инструкции SELECT;</li>
95
<li>мультиоператорные - возвращают T-SQL таблицу, которая создана оператором (одним либо несколькими). Это схоже с хранимыми процедурами, однако отличаются от них тем, что в WHERE можно ссылаться на такие UDF, как на просматриваемый объект.</li>
95
<li>мультиоператорные - возвращают T-SQL таблицу, которая создана оператором (одним либо несколькими). Это схоже с хранимыми процедурами, однако отличаются от них тем, что в WHERE можно ссылаться на такие UDF, как на просматриваемый объект.</li>
96
</ul><h3>Создание и выполнение</h3>
96
</ul><h3>Создание и выполнение</h3>
97
<p>Процесс формирования UDF очень схож с тем, как создаются объекты просмотра и процедур. Они формируются при помощи инструкции CREATE FUNCTION.</p>
97
<p>Процесс формирования UDF очень схож с тем, как создаются объекты просмотра и процедур. Они формируются при помощи инструкции CREATE FUNCTION.</p>
98
<p>UDF может быть использована только пользователями, наделенными ролями sysadmin, db_owner, db_ddladmin. Однако пользователи с перечисленными ролями могут присваивать аналогичные права иным пользователям, воспользовавшись инструкцией GRANT CREATE FUNCTION.</p>
98
<p>UDF может быть использована только пользователями, наделенными ролями sysadmin, db_owner, db_ddladmin. Однако пользователи с перечисленными ролями могут присваивать аналогичные права иным пользователям, воспользовавшись инструкцией GRANT CREATE FUNCTION.</p>
99
<p>Объявления будут отличаться в зависимости от типа хранимой функции.</p>
99
<p>Объявления будут отличаться в зависимости от типа хранимой функции.</p>
100
<h4>Инструкция CREATE FUNCTION</h4>
100
<h4>Инструкция CREATE FUNCTION</h4>
101
<p>Как сказано выше, с помощью CREATE FUNCTION создаются UDF, которые представляют собой подпрограммы среды CLR или T-SQL. CREATE FUNCTION позволяет создавать именно такие подпрограммы.</p>
101
<p>Как сказано выше, с помощью CREATE FUNCTION создаются UDF, которые представляют собой подпрограммы среды CLR или T-SQL. CREATE FUNCTION позволяет создавать именно такие подпрограммы.</p>
102
<p>В дальнейшем подпрограммы, созданные данной инструкцией, могут применяться:</p>
102
<p>В дальнейшем подпрограммы, созданные данной инструкцией, могут применяться:</p>
103
<ul><li>инструкциями Transact-SQL (к примеру, SELECT);</li>
103
<ul><li>инструкциями Transact-SQL (к примеру, SELECT);</li>
104
<li>приложениями, участвующими в вызове функций;</li>
104
<li>приложениями, участвующими в вызове функций;</li>
105
<li>при определении иной UDF;</li>
105
<li>при определении иной UDF;</li>
106
<li>чтобы определить параметры представления либо улучшить функциональные возможности индексированных представлений;</li>
106
<li>чтобы определить параметры представления либо улучшить функциональные возможности индексированных представлений;</li>
107
<li>при определении столбцов таблиц;</li>
107
<li>при определении столбцов таблиц;</li>
108
<li>чтобы определить ограничения на столбец CHECK;</li>
108
<li>чтобы определить ограничения на столбец CHECK;</li>
109
<li>чтобы заменить хранимые процедуры;</li>
109
<li>чтобы заменить хранимые процедуры;</li>
110
<li>для политики безопасности.</li>
110
<li>для политики безопасности.</li>
111
</ul><h3>Скалярные в T-SQL</h3>
111
</ul><h3>Скалярные в T-SQL</h3>
112
<p>После указания инструкции CREATE FUNCTION следует указать имя функции вместе с параметрами, подлежащими передаче. Параметры функции SQL указываются в круглых скобках, путем перечисления и разделения запятыми. Именно это и есть основное отличие от процедур, и его не нужно забывать.</p>
112
<p>После указания инструкции CREATE FUNCTION следует указать имя функции вместе с параметрами, подлежащими передаче. Параметры функции SQL указываются в круглых скобках, путем перечисления и разделения запятыми. Именно это и есть основное отличие от процедур, и его не нужно забывать.</p>
113
<p>Далее следует указать ключевое слово RETURNS вместе с описанием типа значения, подлежащего возврату. Для скалярной функции данный тип может быть любым (строкой, числом, датой), но тоже скалярным.</p>
113
<p>Далее следует указать ключевое слово RETURNS вместе с описанием типа значения, подлежащего возврату. Для скалярной функции данный тип может быть любым (строкой, числом, датой), но тоже скалярным.</p>
114
<p>Код выполняемой функции должен быть вписан внутри блока ключевых слов BEGIN/ END. В середине кода могут указываться любые операторы T-SQL. В этот блок могут быть включены также инструкции: присвоения (к примеру, SET), управления процессом выполнения (WHILE и IF), DECLARE, SELECT.</p>
114
<p>Код выполняемой функции должен быть вписан внутри блока ключевых слов BEGIN/ END. В середине кода могут указываться любые операторы T-SQL. В этот блок могут быть включены также инструкции: присвоения (к примеру, SET), управления процессом выполнения (WHILE и IF), DECLARE, SELECT.</p>
115
<h3>Вызов функций, которые определяют пользователи</h3>
115
<h3>Вызов функций, которые определяют пользователи</h3>
116
<p>UDF могут быть вызваны инструкциями T-SQL: SELECT, UPDATE, INSERT, DELETE.</p>
116
<p>UDF могут быть вызваны инструкциями T-SQL: SELECT, UPDATE, INSERT, DELETE.</p>
117
<p>Для вызова UDF следует указать ее название, на забыв приписать пару круглых скобок. Внутри скобок указывается аргумент (от одного и более), которым может выступать значение либо выражение, передающееся входными параметрами. Они обозначаются вслед за наименованием UDF.</p>
117
<p>Для вызова UDF следует указать ее название, на забыв приписать пару круглых скобок. Внутри скобок указывается аргумент (от одного и более), которым может выступать значение либо выражение, передающееся входными параметрами. Они обозначаются вслед за наименованием UDF.</p>
118
<p>Если при вызове функции для параметров не указаны значения по умолчанию, то для них должны быть предоставлены аргументы, определенные в том же порядке, как и в CREATE FUNCTION. Наименования в инструкциях T-SQL должны задаваться с помощью имен, состоящих из пары слов: function name, schema name и т.д.</p>
118
<p>Если при вызове функции для параметров не указаны значения по умолчанию, то для них должны быть предоставлены аргументы, определенные в том же порядке, как и в CREATE FUNCTION. Наименования в инструкциях T-SQL должны задаваться с помощью имен, состоящих из пары слов: function name, schema name и т.д.</p>
119
<h3>Возвращающие таблицу</h3>
119
<h3>Возвращающие таблицу</h3>
120
<p>Пользователь может создавать функции, для которых результат будет возвращаться в виде таблицы. Они также создаются оператором CREATE FUNCTION. Рядом с ним следует указать наименование функции и круглые скобки, но в них не следует ничего указывать. Если рядом с именем не вписать скобок, то сервер вернет ошибку, а сама функция не будет сформирована.</p>
120
<p>Пользователь может создавать функции, для которых результат будет возвращаться в виде таблицы. Они также создаются оператором CREATE FUNCTION. Рядом с ним следует указать наименование функции и круглые скобки, но в них не следует ничего указывать. Если рядом с именем не вписать скобок, то сервер вернет ошибку, а сама функция не будет сформирована.</p>
121
<p>Если в операторе RETURNS будет указано, что данные имеют тип TABLE, то значит функция должна будет вернуть таблицу. Также должны присутствовать ключевые слова AS и RETURN с указанием значения, которое будет возвращено. Внутри RETURN в круглых скобках должен быть указан запрос, итог которого и будет возвращен.</p>
121
<p>Если в операторе RETURNS будет указано, что данные имеют тип TABLE, то значит функция должна будет вернуть таблицу. Также должны присутствовать ключевые слова AS и RETURN с указанием значения, которое будет возвращено. Внутри RETURN в круглых скобках должен быть указан запрос, итог которого и будет возвращен.</p>
122
<p>Их классификация зависит от способа, определяющего тело UDF. Они могут быть:</p>
122
<p>Их классификация зависит от способа, определяющего тело UDF. Они могут быть:</p>
123
<ul><li>inline - встраиваемые, где рядом с TABLE внутри предложения RETURNS отсутствует сопровождающий список столбцов. Оператором SELECT будет возвращен результирующий набор в виде значения с типом данных TABLE;</li>
123
<ul><li>inline - встраиваемые, где рядом с TABLE внутри предложения RETURNS отсутствует сопровождающий список столбцов. Оператором SELECT будет возвращен результирующий набор в виде значения с типом данных TABLE;</li>
124
<li>multistatement - многоинструкционные, они включают наименование переменной и ключевое слово TABLE, определяющее тип данных. Указанные строки будут вставлены в переменную, которая выступает возвращаемым значением самой функции.</li>
124
<li>multistatement - многоинструкционные, они включают наименование переменной и ключевое слово TABLE, определяющее тип данных. Указанные строки будут вставлены в переменную, которая выступает возвращаемым значением самой функции.</li>
125
</ul><p>При написании запросов, во всех его полях необходимо указывать имя. Отсутствие имени хотя бы в одном поле спровоцирует возврат ошибки, когда будет выполняться инструкция CREATE FUNCTION.</p>
125
</ul><p>При написании запросов, во всех его полях необходимо указывать имя. Отсутствие имени хотя бы в одном поле спровоцирует возврат ошибки, когда будет выполняться инструкция CREATE FUNCTION.</p>
126
<h4>Инструкция APPLY</h4>
126
<h4>Инструкция APPLY</h4>
127
<p>Данная инструкция является реляционной. Ее применение вызовет UDF, возвращающее таблицу для всех строчек табличного выражения.</p>
127
<p>Данная инструкция является реляционной. Ее применение вызовет UDF, возвращающее таблицу для всех строчек табличного выражения.</p>
128
<p>APPLY задают в предложении FROM внутри инструкции SELECT. Ее можно объединять с табличной функцией, чтобы получить результат, схожий с результирующим набором операции объединения двух таблиц.</p>
128
<p>APPLY задают в предложении FROM внутри инструкции SELECT. Ее можно объединять с табличной функцией, чтобы получить результат, схожий с результирующим набором операции объединения двух таблиц.</p>
129
<p>Инструкция APPLY имеет две формы:</p>
129
<p>Инструкция APPLY имеет две формы:</p>
130
<ul><li>CROSS APPLY - возвращает строки из внутреннего выражения таблицы (левого), совпадающие с внешним выражением таблицы (правым). Данная форма логически работает аналогично инструкции INNER JOIN;</li>
130
<ul><li>CROSS APPLY - возвращает строки из внутреннего выражения таблицы (левого), совпадающие с внешним выражением таблицы (правым). Данная форма логически работает аналогично инструкции INNER JOIN;</li>
131
<li>OUTER APPLY - возвращает все строки из внутреннего выражения таблицы (левого). В том случае, когда строчки не имеют совпадений во внешнем выражении таблицы, тогда в столбцах внешнего выражения таблицы они содержат NULL. Данная форма логически работает аналогично инструкции LEFT OUTER JOIN.</li>
131
<li>OUTER APPLY - возвращает все строки из внутреннего выражения таблицы (левого). В том случае, когда строчки не имеют совпадений во внешнем выражении таблицы, тогда в столбцах внешнего выражения таблицы они содержат NULL. Данная форма логически работает аналогично инструкции LEFT OUTER JOIN.</li>
132
</ul><h3>Опции</h3>
132
</ul><h3>Опции</h3>
133
<p>В процессе создания UDF можно использовать одну или обе опции:</p>
133
<p>В процессе создания UDF можно использовать одну или обе опции:</p>
134
<ul><li>SCHEMABINDING - привязки к схеме. Объекты БД, на которые ссылается функция, созданная с данной опцией, не могут изменяться (с помощью ALTER) или удаляться (оператором DROP);</li>
134
<ul><li>SCHEMABINDING - привязки к схеме. Объекты БД, на которые ссылается функция, созданная с данной опцией, не могут изменяться (с помощью ALTER) или удаляться (оператором DROP);</li>
135
<li>ENCRYPTION - шифрования текста функции внутри системных таблиц.</li>
135
<li>ENCRYPTION - шифрования текста функции внутри системных таблиц.</li>
136
</ul><p>Допускается, что UDF может быть связана со схемой, только при выполнении условий:</p>
136
</ul><p>Допускается, что UDF может быть связана со схемой, только при выполнении условий:</p>
137
<ul><li>все функции, которые указаны пользователем и объекты просмотра, на которые они ссылаются, связаны со схемой через опцию SCHEMABINDING;</li>
137
<ul><li>все функции, которые указаны пользователем и объекты просмотра, на которые они ссылаются, связаны со схемой через опцию SCHEMABINDING;</li>
138
<li>объекты, на которые ссылается функция, используют имена, состоящие из двух частей;</li>
138
<li>объекты, на которые ссылается функция, используют имена, состоящие из двух частей;</li>
139
<li>объекты, как и сами функции располагаются в одной БД;</li>
139
<li>объекты, как и сами функции располагаются в одной БД;</li>
140
<li>пользователь, создающий функцию, наделен правами доступа к объектам, на которые она ссылается.</li>
140
<li>пользователь, создающий функцию, наделен правами доступа к объектам, на которые она ссылается.</li>
141
</ul><h3>Параметры, возвращающие таблицу</h3>
141
</ul><h3>Параметры, возвращающие таблицу</h3>
142
<p>В более ранних версиях MS SQL Server, существовавших до SQL Server 2008 значительные сложности вызывала задача передачи множественных параметров подпрограмме. Необходимо было проделать ряд действий: создать временную таблицу, после чего вставить в нее передаваемые показатели. И лишь после этого могла быть вызвана подпрограмма.</p>
142
<p>В более ранних версиях MS SQL Server, существовавших до SQL Server 2008 значительные сложности вызывала задача передачи множественных параметров подпрограмме. Необходимо было проделать ряд действий: создать временную таблицу, после чего вставить в нее передаваемые показатели. И лишь после этого могла быть вызвана подпрограмма.</p>
143
<p>Версия SQL Server 2008 значительно упростила решение данной задачи. Это стало возможно с появлением параметров, возвращающих таблицу. Их применение позволяет передавать результирующий набор в соответствующую подпрограмму.</p>
143
<p>Версия SQL Server 2008 значительно упростила решение данной задачи. Это стало возможно с появлением параметров, возвращающих таблицу. Их применение позволяет передавать результирующий набор в соответствующую подпрограмму.</p>
144
<p>Применение таких параметров имеет ряд преимуществ:</p>
144
<p>Применение таких параметров имеет ряд преимуществ:</p>
145
<ul><li>становится значительно проще программировать такие подпрограммы;</li>
145
<ul><li>становится значительно проще программировать такие подпрограммы;</li>
146
<li>сокращается число обращений к серверу и, соответственно, ответов от него;</li>
146
<li>сокращается число обращений к серверу и, соответственно, ответов от него;</li>
147
<li>таблица может содержать неограниченное число строк.</li>
147
<li>таблица может содержать неограниченное число строк.</li>
148
</ul><h3>Изменение и удаление UDF</h3>
148
</ul><h3>Изменение и удаление UDF</h3>
149
<p>Инструкция ALTER FUNCTION, поддерживаемая языком T-SQL, изменяет структуру UDF. Ее обычно применяют, чтобы удалить привязку к схеме. Параметры данной инструкции имеют значения, аналогичные одноименным параметрам инструкции CREATE FUNCTION. Для каждого вида UDF используется индивидуальный вид команд изменения.</p>
149
<p>Инструкция ALTER FUNCTION, поддерживаемая языком T-SQL, изменяет структуру UDF. Ее обычно применяют, чтобы удалить привязку к схеме. Параметры данной инструкции имеют значения, аналогичные одноименным параметрам инструкции CREATE FUNCTION. Для каждого вида UDF используется индивидуальный вид команд изменения.</p>
150
<p>Чтобы удалить UDF, необходимо использовать инструкцию DROP FUNCTION. Сделать это могут владельцы либо пользователи, наделенные ролями sysadmin или db_owner.</p>
150
<p>Чтобы удалить UDF, необходимо использовать инструкцию DROP FUNCTION. Сделать это могут владельцы либо пользователи, наделенные ролями sysadmin или db_owner.</p>
151
<p>Как становится понятно, для грамотного оперирования функциями в MS SQL Server, необходимо хорошо изучить не только встроенные, но и понять алгоритмы создания пользовательских. Потому, на изучение данного материала нужно потратить достаточно времени, чтобы разобраться во всех деталях. Будем рады, если статья поможет в этом. При возникновении вопросов - обязательно задавайте их. Удачи в изучении основ MS SQL функций и алгоритмов работы с ними!</p>
151
<p>Как становится понятно, для грамотного оперирования функциями в MS SQL Server, необходимо хорошо изучить не только встроенные, но и понять алгоритмы создания пользовательских. Потому, на изучение данного материала нужно потратить достаточно времени, чтобы разобраться во всех деталях. Будем рады, если статья поможет в этом. При возникновении вопросов - обязательно задавайте их. Удачи в изучении основ MS SQL функций и алгоритмов работы с ними!</p>
152
-
<a></a><p>Также пригла��аем на <a>специальный курс по MS SQL</a>.</p>
152
+
<a></a><p>Также приглашаем на <a>специальный курс по MS SQL</a>.</p>
153
153