dotnet应用程序中DATEFIRST()函数的范围是什么

时间:2017-08-14 07:46:36

标签: .net sql-server connection-pooling

假设我会在查询中执行此操作:

set DATEFIRST 1  --Monday

将明确设置星期几被视为第一个'

但是这只是这次交易的情况,还是我从这一点开始的所有查询呢? 该部分未在文档中提及。至少我在本文档docs

中找不到它

我正在使用sql server 2014

重复问题中的答案有很多帮助。它解释了每个会话的价值 但是,当dotnet重新使用其池化机制的连接时,会出现另一个问题,这个设置是否存在? 我在另一个问题中找不到。

2 个答案:

答案 0 :(得分:2)

它适用于您的会话/连接 - 只要您保持相同的连接,在其上执行的所有查询都将使用当前的DATEFIRST设置。它比任何特定的交易或批次都要长。

但是,我通常建议您不要更改此设置。相反,如果可能的话,找到以始终有效的方式表达查询的方法,无论哪个设置生效。

例如,如果我想要一个谓词来测试特定的存储值是否是星期一,我会写一些类似的东西:

DATEPART(weekday,<ValueToTest>) = DATEPART(weekday,'20151116') --"Known Good" Monday

无论DATEFIRST设置生效,上述内容始终有效。

答案 1 :(得分:0)

足够容易测试。设置set DATEFIRST n仅适用于当前会话,只需要声明一次。现在进行测试。