Définir datefirst de façon permanente

Je voudrais changer en permanence la valeur de DATEFIRST ( qui est utilisé pour des fonctions comme DATEPART )

Si je fais ceci: SET DATEFIRST 1 la valeur rest pendant l'exécution mais elle revient à la valeur par défaut – 7 ici – après l'exécution

J'ai déjà eu le problème, je sais que c'est lié au pays de la connection mais j'ai oublié quelle table et quelle propriété j'ai dû changer.

Je dois dire que cela a pris quelques searchs de ma part. Jetez un oeil à la requête suivante. Vous remarquerez le champ datefirst. J'imagine qu'il y a toutes sortes d'implications d'autorisation qui accompagnent le changement des parameters de langue à ce niveau.

 SELECT * FROM sys.syslanguages 

Je n'ai pas de server pour le moment, mais j'imagine que grâce à une instruction set, vous pouvez définir la colonne datefirst comme vous le souhaitez.

TEST TEST TEST car cela aura d'énormes implications à travers plus de problème que vous essayez de résoudre.

Ressource intéressante # 1

Ressource intéressante # 2

Ressource intéressante # 3

Vous pouvez modifier la langue par défaut d'une connection SQL ou d'un user Windows authentifié sur SQL Server à l'aide de Microsoft SQL Server Management Studio ou en exécutant l'exemple de script t-sql ci-dessous:

 USE [master] GO ALTER LOGIN [login] WITH DEFAULT_LANGUAGE = [you_language] GO 

Le script a été pris sur ce site

Peut-être un peu en retard à la fête, mais voici un moyen de "bidouiller", quelle que soit la valeur de datefirst, définie soit sur le server, db, login ou session et paramétrable (WOW, jamais utilisé avant) dès le premier jour vous voulez que ce soit:

 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 

PS: Peut-être que les seules situations dans lesquelles vous aurez besoin de cela sont dans une fonction ou une contrainte (colonnes calculées peut-être) où les opérations SET ne sont pas autorisées. Si SET est autorisé, réglez-le comme vous en avez besoin et oubliez-le.