Skip to content

Понятие конфигурационных функций T-SQL в SQL Server

Пересказ статьи Manvendra Singh. Understanding SQL Server T-SQL Configuration Functions


Имеется множество настроек конфигурации SQL Server, которые мы меняем по мере необходимости. SQL Server предоставляет много способов проверки этих конфигурационных настроек. Одним из способов проверки является использование конфигурационных функций. Здесь я рассмотрю эти функции и некоторые случаи их использования для лучшего понимания того, как мы можем их использовать для проверки настроек конфигурации.

Конфигурационные функции SQL Server возвращают существующее значение настройки опции конфигурации. При выполнении эти функции не всегда возвращают один и тот же результат при одних и тех же входных параметрах, поскольку в силу их недетерминистического поведения. SQL Server предлагает различные функции конфигурации для получения отдельных параметров конфигурации. Ниже приводится список всех конфигурационных функций, предоставляемых SQL Server.

  • @@DBTS

  • @@LANGID

  • @@LANGUAGE

  • @@DATEFIRST

  • @@SPID

  • @@VERSION

  • @@SERVERNAME

  • @@LOCK_TIMEOUT

  • @@MAX_CONNECTIONS

  • @@MAX_PRECISION

  • @@NESTLEVEL

  • @@OPTIONS

  • @@REMSERVER

  • @@SERVICENAME

  • @@TEXTSIZE


Вы могли уже использовать некоторые из этих конфигурационных функций, например, @@VERSION, @@SERVERNAME или @@SPID и т.п.

@@DBTS


Эта функция возвращает последнее значение типа данных TIMESTAMP для текущей базы данных. TIMESTAMP - это тип данных, который используется для автоматической генерации уникального значения штампа времени для базы данных. Если выбрать этот тип данных для столбца в таблице, то всякий раз, когда вы выполняете INSERT или UPDATE этот столбец будет захватывать штамп времени и сохранять его для последующих ссылок.

В SQL Server конфигурационная функция @@DBTS используется для возвращения последнего значения TIMESTAMP базы данных. Мы можем выполнить нижеприведенный оператор, чтобы получить её вывод для базы данных.

USE TESTDB
GO
SELECT @@DBTS
GO

После выполнения мной этого оператора T-SQL получен результат, представленный на рисунке ниже.



Это значение получает приращение на основе активности базы данных. Давайте продемонстрируем это на создании таблицы, вставки в нее нескольких строк и проверки этого значения, чтобы убедиться в его изменении. Я выполнил нижеприведенные операторы для создания таблицы с именем DBTS в базе данных TESTDB, вставки в неё нескольких строк с последующей проверкой штампа времени. Можно увидеть, что временная метка постепенно увеличивается.

CREATE TABLE DBTS (city varchar(15), timestamp timestamp )
GO
SELECT @@DBTS
GO
INSERT INTO DBTS(city) values('Gurgaon')
GO
SELECT @@DBTS
GO
INSERT INTO DBTS(city) values('Mumbai')
GO
SELECT @@DBTS
GO

Выполнение этих операторов дало следующие результаты. Можно увидеть, что после выполнения каждого оператора вставки штамп времени возрастает.



Теперь я покажу значение штампа времени с использованием этой конфигурационной функции после обновления этих записей. Я выполнил следующий оператор T-SQL для обновления города сначала на Delhi, а потом на Ballia. У меня были вставлены две записи в примере выше; здесь каждый оператор UPDATE будет обновлять обе записи одним и тем же значением. Сначала обе записи обновят город на Delhi, а затем, после проверки штампа времени, во втором операторе UPDATE они опять обновят город на Ballia.

USE TESTDB
GO
UPDATE [dbo].[DBTS] SET [city] = 'Delhi'
GO
SELECT @@DBTS
GO
UPDATE [dbo].[DBTS] SET [city] = 'Ballia'
GO
SELECT @@DBTS
GO

На скриншоте мы можем увидеть возвращаемое значение штампа времени.

Когда выполняется первый оператор UPDATE, он обновляет две записи на Delhi, поэтому штамп времени поменяется на **4 и **5.

Когда выполняется второй оператор UPDATE, он снова меняет обе записи, поэтому штамп времени изменится на **6 и **7.



@@LANGID and @@LANGUAGE


Здесь я рассмотрю еще 2 конфигурационные функции, с помощью которых вы можете получить текущий язык, используемый экземпляром SQL Server.

  • @@LANGID возвращает текущий идентификатор языка (language id). Вы можете получить список всех языков и их идентификаторы, выполнив системную хранимую процедуру sp_helplanguage.

  • @@LANGUAGE вернет название языка, используемого в настоящий момент.


Я выполнил системную хранимую процедуру sp_helplanguage для получения списка всех языков и их идентификаторов, а затем выполнил @@LANGID и @@LANGUAGE, чтобы увидеть текущий язык, используемый экземпляром SQL Server.

sp_helplanguage
GO
SELECT @@LANGID AS [Language ID],
@@LANGUAGE AS [Language Name]
GO

Ниже вы можете увидеть список всех языков в первом результирующем наборе, а во втором - текущий используемый язык.



Давайте поменяем установку языка с помощью оператора SET LANGUAGE, и проверим результат, возвращаемый конфигурационной функцией. Я меняю язык на British English.

sp_helplanguage 'British English'
GO
SET LANGUAGE 'British English'
GO
SELECT @@LANGID AS [Language ID],
@@LANGUAGE AS [Langugae Name]
GO

Вот вывод.



Вот еще один пример.



@@DATEFIRST


Функция @@DATEFIRST используется для получения текущей конфигурации оператора SET DATEFIRST. Оператор SET DATEFIRST применяется для установки конкретного дня, используя числа от 1 до 7 в качестве первого дня недели.

Каждому дню приписано число, как показано в нижеследующей таблице. Значением по умолчанию является 7, что соответствует воскресенью как первому дню недели. Если вы хотите изменить это значение на другой день, вы можете сделать это, выполнив SET DATEFIRST.



Давайте проверим текущую настройку.

SELECT @@DATEFIRST AS [1st day of the Week]

Результат выполнения показывает 7, это означает, что воскресенье является первым днем недели и значением по умолчанию.



Давайте изменим это значение с помощью оператора SET DATEFIRST и сделаем среду первым днем недели. Нам потребуется передать номер среды из представленной выше таблицы в оператор SET DATEFIRST.

SELECT @@DATEFIRST AS [1st day of the Week]
GO
SET DATEFIRST 3
GO
SELECT @@DATEFIRST AS [1st day of the Week]

Вывод:



Следует знать, что настройка первого дня недели может измениться, если вы измените язык SQL Server. Давайте посмотрим пример.

Оператор ниже вернет используемый язык, наряду с первым днем недели, текущих настроек SQL Server.

SELECT @@LANGID AS [Language ID],
@@LANGUAGE AS [Language Name],
@@DATEFIRST AS [1st day of the Week]

Вы можете увидеть результаты на скриншоте ниже.



Теперь я изменю язык на шведский с помощью оператора SET LANGUAGE и снова выполню те же операторы.

SET LANGUAGE 'Swedish'
GO
SELECT @@LANGID AS [Language ID],
@@LANGUAGE AS [Language Name],
@@DATEFIRST AS [1st day of the Week]
GO
sp_helplanguage 'Swedish'

Видно, что первый день недели по умолчанию был установлен в 1, когда мы поменяли язык на шведский (Swedish).



@@SPID и @@SERVERNAME


Возможно, это самые популярные функции.

@@SPID используется для получения идентификатора сессии текущего подключения или пользовательского процесса. @@SERVERNAME возвращает имя экземпляра SQL Server.

Идентификатор сессии представляет собой уникальное число, которое присваивается каждому подключению к базе данных. Вы можете использовать эту функцию, как показано в операторе T-SQL ниже, для получения идентификатора сессии пользовательского подключения.

SELECT @@SPID AS [Session ID]

Я выполнил этот оператор, и он вернул ИД сессии 70 для моего текущего подключения.



Вы можете также использовать эту конфигурационную функцию наряду с другими функциями.

SELECT @@SPID AS [Session ID],
@@SERVERNAME AS [DB Server Name],
SYSTEM_USER AS [Login Name]

Как показано на рисунке ниже, оператор возвращает идентификатор сессии, имя экземпляра SQL Server и имя пользователя.



@@VERSION


Эта функция возвращает текущую установленную версию SQL Server.

SELECT @@VERSION AS [SQL Server Version]

Результат содержит версию SQL Server, а также информацию о версии операционной системы.



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

SELECT @@SERVERNAME AS [DB Server Name],
@@VERSION AS [SQL Server Version],
SERVERPROPERTY('PRODUCTVERSION')


Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.