Podczas korzystania z SQL Server bieżące połączenie zawiera szereg opcji, które określają takie rzeczy, jak język, formaty dat itp. Można je ustawić niezależnie od wartości domyślnych, ale można je również zastąpić podczas sesji za pomocą
Format daty wpływa na interpretację ciągów znaków, ponieważ są one konwertowane na wartości dat do przechowywania w bazie danych. Gdy język jest ustawiony za pomocą USTAW JĘZYK
, ustawienie formatu daty jest odpowiednio ustawione niejawnie. Można to wyraźnie zmienić za pomocą SET DATEFORMAT
oświadczenie.
W każdym razie możesz znaleźć bieżący format daty, używając DBCC USEROPTIONS
Komenda. To polecenie zwraca SET
opcje, które zostały ustawione dla bieżącego połączenia.
Składnia
Składnia wygląda tak:
DBCC USEROPTIONS [ WITH NO_INFOMSGS ]
Opcjonalny NO_INFOMSGS
argument blokuje wszystkie komunikaty informacyjne o poziomach ważności od 0 do 10.
Przykład
Oto przykład uruchomienia polecenia i wyniki, które otrzymuję na mojej obecnej maszynie testowej:
DBCC USEROPTIONS;
Wynik:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Jak wspomniano, możesz zmienić te opcje za pomocą SET
oświadczenia.
Oto przykład zmiany języka w bieżącej sesji, a następnie ponownego uruchomienia polecenia:
SET LANGUAGE German; DBCC USEROPTIONS;
Wynik:
+-------------------------+----------------+ | 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.
Widzimy więc, że zmienił się nie tylko język, ale także zmienił się format daty.
Jeśli jednak nie jest to pożądany format daty, format daty można jawnie zmienić za pomocą SET DATEFORMAT
.
Tak:
SET DATEFORMAT mdy; DBCC USEROPTIONS;
Wynik:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Widzimy, że format daty został zmieniony zgodnie ze specyfikacją, pozostawiając język bez zmian.
Widok sys.dm_exec_requests
Możesz również zwrócić format daty używany w bieżącym żądaniu, wysyłając zapytanie do sys.dm_exec_requests
widok systemu. Ten widok zwraca całkiem sporo kolumn, ale możesz zawęzić je tylko do tych, którymi jesteś zainteresowany. W naszym przypadku interesuje nas tylko jedna kolumna – date_format
kolumna:
SELECT r.date_format FROM master.sys.dm_exec_requests r WHERE r.session_id = @@SPID;
Wynik:
+---------------+ | date_format | |---------------| | mdy | +---------------+
Zawęziłem również zapytanie do aktualnego żądania. Zrobiłem to za pomocą @@SPID
, który zwraca identyfikator sesji bieżącego procesu użytkownika.