Alterar o formato de data e idioma do SQL Server a nível de usuário

O SQL Server possui configurações globais para regionalização, porém, a configuração do usuário pode estar diferente. As configurações da instância podem estar em um idioma e as configurações do usuário do SQL Server pode ter outra configuração.
sql1

Propriedades da instância

As configurações do usuário sobrescrevem as configurações do servidor. Recentemente tive um problema com um relatório do Crystal Reports que executava no ambiente de homologação, mas não executava em produção. O problema esta na cláusula between, pois, em produção o formato estava dd/mm/yyyy e em homologação estava com o formato mm/dd/yyyy.

Verifiquei todos os ambientes e as configurações de data e hora, idioma, versão do banco etc estavam todas iguais. O problema ocorreu na criação do usuário. Para solucionar este problema basta atualizar as configurações do usuário que está conectando no banco.

Descobri esse problema utilizando o comando dbcc useroptions que lista todas as configurações do usuário. No ambiente de homologação tinha a seguinte configuração:

 sql2

E em produção tinha a configuração abaixo:

sql3

Repare que o dateformat está diferente entre os ambientes, mdy (month/day/year) para homologação e dmy (day/month/year) em produção.

A tabela sys.syslanguages (select * from sys.syslanguages) possui diversas informações sobre formato de datas, idiomas etc suportadas pelo SQL Server:

sql4

Após consultar a tabela basta “setar” a configuração desejada com o comando Set Language ‘Português’

Esse comando altera a linguagem durante a execução da query:

Set Language ‘Português’
SELECT * FROM
Teste
WHERE Field1 BETWEEN ’13/12/2016′ AND ’31/12/2016′

Para alterar por definitivo o idioma do usuário basta ir na pasta de Segurança > Logons.
Clique com o botão direito no usuário que deseja alterar e vá em propriedades. Na opção Geral selecione o idioma padrão.

sql05

OBSERVAÇÃO IMPORTANTE!

Utilizei esta solução por estar trabalhando com um usuário que não tinha privilégios de administrador e precisava de uma solução para contornar o problema. Eu não tinha acesso para alterar o idioma padrão do usuário, por isso, a necessidade de alterar o idioma em tempo de execução nos relatórios do Crystal Reports.
A solução ideal é que todos os ambientes estejam com a mesma configuração para evitar este tipo de problema. Sempre de preferência em equalizar os ambientes para garantir uma boa entrega em produção e evitar surpresas como esta.

Até a próxima!