Když používáte SQL Server, vaše aktuální připojení obsahuje řadu možností, které určují věci, jako je jazyk, formáty data atd. Ty lze nastavit na jakoukoli výchozí hodnotu, ale lze je také během relace přepsat pomocí SET
prohlášení.
Formát data ovlivňuje interpretaci řetězců znaků při jejich převodu na hodnoty data pro uložení v databázi. Když je jazyk nastaven pomocí SET LANGUAGE
, je implicitně nastaveno nastavení formátu data. Toto lze explicitně přepsat pomocí SET DATEFORMAT
prohlášení.
V každém případě můžete aktuální formát data zjistit pomocí DBCC USEROPTIONS
příkaz. Tento příkaz vrátí SET
možnosti, které byly nastaveny pro aktuální připojení.
Syntaxe
Syntaxe vypadá takto:
DBCC USEROPTIONS [ WITH NO_INFOMSGS ]
Volitelné NO_INFOMSGS
argument potlačí všechny informační zprávy, které mají úrovně závažnosti od 0 do 10.
Příklad
Zde je příklad spuštění příkazu a výsledky, které získám na svém aktuálním testovacím počítači:
DBCC USEROPTIONS;
Výsledek:
+-------------------------+----------------+ | 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 již bylo zmíněno, tyto možnosti můžete změnit pomocí SET
prohlášení.
Zde je příklad změny jazyka aktuální relace a opětovného spuštění příkazu:
SET LANGUAGE German; DBCC USEROPTIONS;
Výsledek:
+-------------------------+----------------+ | 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.
Můžeme tedy vidět, že se nejen změnil jazyk, ale také formát data.
Pokud se však nejedná o požadovaný formát data, lze formát data explicitně změnit pomocí SET DATEFORMAT
.
Takhle:
SET DATEFORMAT mdy; DBCC USEROPTIONS;
Výsledek:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
A můžeme vidět, že formát data byl změněn podle specifikace, přičemž jazyk zůstal tak, jak je.
Zobrazení sys.dm_exec_requests
Můžete také vrátit formát data používaný v aktuálním požadavku dotazem na sys.dm_exec_requests
systémový pohled. Toto zobrazení vrací pěkné velké množství sloupců, ale můžete jej zúžit pouze na ty sloupce, které vás zajímají. V našem případě nás zajímá pouze jeden sloupec – date_format
sloupec:
SELECT r.date_format FROM master.sys.dm_exec_requests r WHERE r.session_id = @@SPID;
Výsledek:
+---------------+ | date_format | |---------------| | mdy | +---------------+
Dotaz jsem také zúžil pouze na aktuální požadavek. Udělal jsem to pomocí @@SPID
, která vrací ID relace aktuálního uživatelského procesu.