När du använder SQL Server innehåller din nuvarande anslutning ett antal alternativ som bestämmer saker som språk, datumformat etc. Dessa kan ställas in som standard, men de kan också åsidosättas under sessionen genom att använda en SET
uttalande.
Datumformatet påverkar tolkningen av teckensträngar när de konverteras till datumvärden för lagring i databasen. När språket är inställt med SET LANGUAGE
, är inställningen av datumformat implicit inställd i enlighet därmed. Detta kan uttryckligen åsidosättas med SET DATEFORMAT
uttalande.
I vilket fall som helst kan du hitta det aktuella datumformatet genom att använda DBCC USEROPTIONS
kommando. Detta kommando returnerar SET
alternativ som har ställts in för den aktuella anslutningen.
Syntax
Syntaxen ser ut så här:
DBCC USEROPTIONS [ WITH NO_INFOMSGS ]
Den valfria NO_INFOMSGS
argument undertrycker alla informationsmeddelanden som har allvarlighetsnivåer från 0 till 10.
Exempel
Här är ett exempel på hur kommandot körs och resultaten jag får på min nuvarande testmaskin:
DBCC USEROPTIONS;
Resultat:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Som nämnts kan du ändra dessa alternativ med SET
uttalanden.
Här är ett exempel på att ändra språket för den aktuella sessionen och sedan köra kommandot igen:
SET LANGUAGE German; DBCC USEROPTIONS;
Resultat:
+-------------------------+----------------+ | 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.
Så vi kan se att inte bara språket ändrades, utan även datumformatet.
Men om detta inte är det önskade datumformatet kan datumformatet explicit ändras med SET DATEFORMAT
.
Så här:
SET DATEFORMAT mdy; DBCC USEROPTIONS;
Resultat:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Och vi kan se att datumformatet har ändrats som specificerat, samtidigt som språket lämnas som det är.
Vyn sys.dm_exec_requests
Du kan också returnera datumformatet som används i den aktuella begäran genom att fråga sys.dm_exec_requests
systemvy. Den här vyn returnerar ett stort gäng kolumner, men du kan begränsa den till endast de kolumner du är intresserad av. I vårt fall är vi bara intresserade av en kolumn – date_format
kolumn:
SELECT r.date_format FROM master.sys.dm_exec_requests r WHERE r.session_id = @@SPID;
Resultat:
+---------------+ | date_format | |---------------| | mdy | +---------------+
Jag har också begränsat frågan till bara den aktuella begäran. Jag gjorde detta genom att använda @@SPID
, som returnerar sessions-ID för den aktuella användarprocessen.