В таблице 5 представлены основные функции конфигурирования сервера.
Формат функции
Назначение
@@DATEFIRST
Возвращает текущее значение первого дня недели
@@DBTS
Выводит текущее значение счетчика timestamp для текущей базы данных
@@LANGID
Возвращает идентификатор локального языка, являющегося текущим
@@LANGUAGE
Показывает, какой язык является текущим
@@LОCK_TIMEOUT
Возвращает количество миллисекунд, которое сервер будет ожидать до выполнения запроса
@@MAX_CONNECTION
Выводит максимальное количество подключений, которое одновременно могут установить пользователи (по умолчанию 32 767)
@@MAX_PRECISION
Возвращает максимальное количество знаков, поддерживаемое сервером для типов данных numeric и decimal
@@NESTLEVEL
Возвращает текущий уровень вложенности хранимых процедур
@@REMSERVER
Возвращает имя удаленного сервера
@@SERVERNAME
Возвращает имя локального сервера
@@SPID
Возвращает идентификационный номер текущего процесса
@@TEXTSIZE
Возвращает максимальный размер блока в байтах, который может быть возвращен командой SELECTдля столбцов типа
text, image, varchar (max:) , varbinary(max) , nvarchar(max)
@@VERSION
Возвращает информацию о версии сервера, типе процессора, операционной системе
Часть 2. Функции пользователя
При реализации на языке SQL сложных алгоритмов, которые могут понадобиться более одного раза, встает вопрос о сохранении разработанного кода.
Эту задачу можно было бы решить с помощью хранимых процедур, однако их архитектура не позволяет использовать процедуры непосредственно в выражениях, т.к. они требуют промежуточного присвоения возвращаемого значения переменной, которая затем используется в этих выражениях.
Естественно, такой метод применения программного кода не слишком удобен. Необходима возможность вызова разработанного кода непосредственно в выражениях. Такая возможность предоставлена, начиная с SQL Server 2000. В других реализациях SQL в распоряжении пользователя имеются только встроенные функции, обеспечивающие выполнение наиболее распространенных алгоритмов: поиск максимального значения и др.
Функции пользователя представляют собой самостоятельные объекты базы данных, такие, например, как хранимые процедуры или триггеры. Функция пользователя располагается в определенной базе данных и доступна только в ее контексте.
В SQL Server имеются следующие классы функций пользователя:
• Scalar - функции возвращают обычное скалярное значение. Функции этого класса могут включать множество команд, объединяемых в один блок с помощью конструкции BEGIN...END;
• Inline - функции содержат всего одну команду select и возвращают пользователю набор данных в виде значения типа данных table;
• Multi -statement - функции также возвращают пользователю значение типа данных TABLE, содержащее набор данных, однако в теле функции находится множество команд SQL (в том числе INSERT,UPDATE и т.д.). Именно с их помощью и формируется набор данных, который должен быть возвращен после выполнения функции.
Пользовательские функции сходны с хранимыми процедурами, но, в отличие от них, могут применяться в запросах так же, как и системные встроенные функции.
В отличие от хранимых процедур функция не имеет выходных параметров (только входные).
У хранимых процедур в качестве выходных параметров предусмотрен только целый тип данных, а у пользовательских функций возвращаемый набор может иметь любой тип данных SQL Server.
И, кроме того, в отличие от хранимых процедур пользовательские функции могут возвращать целые таблицы.
Надо отметить и следующее: хранимая процедура, конечно, может возвращать результирующий набор, но для дальнейшего использования этого набора, например, в запросах, его необходимо предварительно вставить в какую-либо таблицу (например, во временную). Даже, если хранимая процедура возвращает табличный результирующий набор, все равно в кодах необходимо сделать ещё шаг. Это неудобно. Результирующий набор, возвращаемый функцией, можно использовать в любых запросах.
Пользовательские функции, возвращающие таблицы, могут стать альтернативой просмотрам. Просмотры ограничены одним выражением SELECT, а пользовательские функции способны включать дополнительные выражения, что позволяет создавать более сложные и мощные конструкции.