我想永久更改DATEFIRST的值(用于 DATEPART 等功能)
如果我这样做:SET DATEFIRST 1
值在执行期间保持但它会在执行后返回默认值 - 7 -
我已经遇到了问题,我知道这与登录的国家有关,但是我忘记了哪个表格&我必须改变哪个属性。
答案 0 :(得分:1)
我必须说这对我进行了一些研究。看看以下查询。您会注意到datefirst字段。我认为在这个级别上,随着语言设置的改变,会产生各种权限影响。
SELECT
*
FROM
sys.syslanguages
我没有服务器,我现在可以对此进行测试,但我想通过set语句可以将datefirst列设置为您想要的任何内容。
测试测试测试,因为这将对你试图解决的问题产生巨大的影响。
答案 1 :(得分:1)
您可以使用Microsoft SQL Server Management Studio或执行以下示例t-sql脚本来更改在SQL Server上进行身份验证的sql登录或Windows用户的默认语言:
USE [master]
GO
ALTER LOGIN [login] WITH DEFAULT_LANGUAGE = [you_language]
GO
答案 2 :(得分:1)
参加聚会可能有点晚了,但是这里有一种方式来攻击#34; hack"它,无论datefirst值,在实际想要它的第一天,设置为服务器,db,登录或会话和参数化(WOW,之前从未使用过这个词):
declare
/*
Let's say for a regular, boring day of Monday
, regarldess of the datefirst value, I want it to return Monday as 1 (first day of week)
*/
@ForDate datetime = '20170320',
-- you can play with any value here
@SetDateFirstValue int = 5
--this is only for testing
set datefirst @SetDateFirstValue;
select
datepart(dw,@ForDate) as ActualReturnedDayOfWeek
, datepart(dw,dateadd(dd, @@DATEFIRST - 1,@ForDate)) As IWantItThisWay
P.S。 :也许你曾经需要的唯一情况是函数或约束(可能是计算列),其中不允许SET
操作。如果允许SET
,请在需要时设置它并忘记它。