有没有办法查询当前正在使用TATE SQL的DATEFORMAT SQLServer 2005?
我有一个应用程序,它读取预生成的INSERT语句并对数据库执行它们.为了使数据与文化无关,我存储了在不变文化中表示的日期时间值(月/日/年......).数据库服务器可以在不同的语言环境下运行,具体取决于系统区域设置(可能使用日/月/年),因此插入可能会崩溃,因为无法解析日期时间.
我知道T-SQL中有"SET LANGUAGE"和"SET DATEFORMAT"语句来设置要使用的语言环境.
我不希望这些更改是永久性的(它们是永久性的吗?),所以我正在寻找一种方法从数据库中读取DATEFORMAT,存储它,将格式更改为我喜欢的并将其重置为存储的值后已插入数据.
任何想法在服务器中找到该值?
以下语句将使用给定的日期格式(@dateFormat变量)执行日期解析操作,然后重新启用原始日期格式.
declare @dateFormat nvarchar(3); set @dateFormat = 'dmy'; declare @originalDateFormat nvarchar(3); select @originalDateFormat = date_format from sys.dm_exec_sessions where session_id = @@spid; set dateformat @dateFormat; --Returns 1. select isdate('31/12/2010'); set dateformat @originalDateFormat;
请注意,日期格式更改仅适用于当前连接.仅执行重新启用原始日期格式以确保在同一连接上执行的后续语句不受此更改的影响.
设置语言和设置DateFormat仅影响当前会话.如果断开与数据库的连接并再次连接,则语言和Dateformat将恢复为默认值.
您可以使用"技巧"来确定DateFormat是m/d/y还是d/m/y.
Select DatePart(Month, '1/2/2000')
这个日期无论哪种方式都有效.它是1月2日或2月1日.如果此查询返回1,那么您有MDY.如果它返回2,则表示您有DMY.
sys.dm_ exec_sessions中的date_格式列如何?
您始终可以查看自己的会话,因此不需要服务器级别的权限