Использование системных функций

Системные функции открывают доступ к данным системных таблиц SQL Server без непосредственного доступа к системным таблицам.

Имена некоторых системных функций в языке Transact-SQL начинаются с двух символов «@» (@@). Хотя в предыдущих версиях SQL Server обращение к @@-функциям производилось как к глобальным переменным, они не являются переменными и ведут себя иначе. @@-функции являются системными функциями, и синтаксис их использования стандартен для функций.

Каждая из следующих пар системных функций для баз данных, узлов, объектов, имен входа и пользователей возвращает имя при заданном идентификаторе (ID) и возвращает идентификатор при заданном имени:

  • DB_ID и DB_NAME

  • HOST_ID и HOST_NAME

  • OBJECT_ID и OBJECT_NAME

  • SUSER_ID и SUSER_NAME (или SUSER_SID и SUSER_SNAME)

  • USER_ID и USER_NAME

Например, для получения идентификационного номера базы данных используется функция DB_ID вместо инструкции SELECT для таблицы sysobjects.

В следующем примере показано получение имени текущего пользователя, вошедшего в систему, с помощью проверки подлинности SQL Server:

SELECT SUSER_NAME();

Следующие функции похожи между собой, но они не входят во взаимодополняющие пары и принимают более одного входного параметра:

  • COL_LENGTH

    Возвращает длину столбца, но не длину отдельных строк, хранящихся в столбце. Для определения общего числа символов в конкретном значении используется функция DATALENGTH.

    Следующий пример возвращает длину столбца и длину данных в столбце LastName таблицы Employees:

    SELECT COL_LENGTH('Employees', 'LastName') AS Col_Length, 
       DATALENGTH(LastName) AS DataLength
    FROM Employees
    WHERE EmployeeID > 6;
    
  • COL_NAME

    Возвращает имя столбца.

  • INDEX_COL

    Возвращает имя индексного столбца.

Рекомендуется использовать системные функции, представления информационной схемы или системные хранимые процедуры для получения сведений о системе вместо прямых запросов к системным таблицам. Системные таблицы от версии к версии SQL Server могут существенно различаться.