Когато използвате SQL Server, текущата ви връзка включва редица опции, които определят неща като езика, форматите на датата и т.н. Те могат да бъдат зададени на каквото и да е по подразбиране, но те също могат да бъдат отменени по време на сесията с помощта на SET
изявление.
Форматът на датата влияе върху тълкуването на символните низове, тъй като те се преобразуват в стойности за дата за съхранение в базата данни. Когато езикът е зададен с помощта на SET LANGUAGE
, настройката за формат на датата се задава съответно имплицитно. Това може да бъде изрично отменено с SET DATEFORMAT
изявление.
Във всеки случай можете да намерите текущия формат на датата, като използвате DBCC USEROPTIONS
команда. Тази команда връща SET
опции, които са зададени за текущата връзка.
Синтаксис
Синтаксисът е така:
DBCC USEROPTIONS [ WITH NO_INFOMSGS ]
Незадължителният NO_INFOMSGS
аргументът потиска всички информационни съобщения, които имат нива на сериозност от 0 до 10.
Пример
Ето пример за изпълнение на командата и резултатите, които получавам на текущата си тестова машина:
DBCC USEROPTIONS;
Резултат:
+-------------------------+----------------+ | Set Option | Value | |-------------------------+----------------| | textsize | -1 | | language | us_english | | dateformat | mdy | | datefirst | 7 | | lock_timeout | 5000 | | quoted_identifier | SET | | arithabort | SET | | ansi_null_dflt_on | SET | | ansi_warnings | SET | | ansi_padding | SET | | ansi_nulls | SET | | concat_null_yields_null | SET | | isolation level | read committed | +-------------------------+----------------+
Както споменахме, можете да промените тези опции с SET
изявления.
Ето пример за промяна на езика на текущата сесия, след което командата се изпълнява отново:
SET LANGUAGE German; DBCC USEROPTIONS;
Резултат:
+-------------------------+----------------+ | Set Option | Value | |-------------------------+----------------| | textsize | -1 | | language | Deutsch | | dateformat | dmy | | datefirst | 1 | | lock_timeout | 5000 | | quoted_identifier | SET | | arithabort | SET | | ansi_null_dflt_on | SET | | ansi_warnings | SET | | ansi_padding | SET | | ansi_nulls | SET | | concat_null_yields_null | SET | | isolation level | read committed | +-------------------------+----------------+ Die Spracheneinstellung wurde in Deutsch geändert.
Така че можем да видим, че не само езикът се промени, но и форматът на датата.
Въпреки това, ако това не е желания формат на датата, форматът на датата може да бъде изрично променен с помощта на SET DATEFORMAT
.
Като това:
SET DATEFORMAT mdy; DBCC USEROPTIONS;
Резултат:
+-------------------------+----------------+ | Set Option | Value | |-------------------------+----------------| | textsize | -1 | | language | Deutsch | | dateformat | mdy | | datefirst | 1 | | lock_timeout | 5000 | | quoted_identifier | SET | | arithabort | SET | | ansi_null_dflt_on | SET | | ansi_warnings | SET | | ansi_padding | SET | | ansi_nulls | SET | | concat_null_yields_null | SET | | isolation level | read committed | +-------------------------+----------------+
И можем да видим, че форматът на датата е променен, както е посочено, като оставяме езика такъв, какъвто е.
Изгледът sys.dm_exec_requests
Можете също да върнете формата на датата, използван в текущата заявка, като направите заявка sys.dm_exec_requests
системен изглед. Този изглед връща хубав голям куп колони, но можете да го стесните само до тези колони, които ви интересуват. В нашия случай се интересуваме само от една колона – date_format
колона:
SELECT r.date_format FROM master.sys.dm_exec_requests r WHERE r.session_id = @@SPID;
Резултат:
+---------------+ | date_format | |---------------| | mdy | +---------------+
Освен това стесних заявката само до текущата заявка. Направих това с помощта на @@SPID
, който връща идентификатора на сесията на текущия потребителски процес.