{coding}Sight
quando você desenvolve um aplicativo ou escreve um código no sistema de banco de dados SQL, é crucial entender como os dados serão classificados e comparados. Você pode armazenar seus dados em um idioma específico ou pode querer que o SQL Server trate dados sensíveis a maiúsculas e minúsculas separadamente. A Microsoft forneceu uma configuração do SQL Server chamada agrupamento para controlar e atender a esses requisitos.
o que é agrupamento no SQL Server?
podemos definir o agrupamento em vários níveis no SQL Server, conforme fornecido abaixo.
- Servidor
- Banco de dados
- Nível de Coluna
- Nível de Expressão
O agrupamento de nível de Servidor, às vezes, pode ser chamado de Instância do SQL Server nível de agrupamento.
o agrupamento de nível do banco de dados será herdado da configuração de agrupamento de nível do servidor se você não escolher nenhum agrupamento específico durante a criação do banco de dados. Você também pode alterar o agrupamento no nível do banco de dados posteriormente. Observe que a alteração do Agrupamento de banco de dados será aplicada apenas a objetos futuros ou novos que serão criados após a alteração do Agrupamento.
o novo agrupamento não modificará os dados existentes armazenados em tabelas que foram classificadas com o último tipo de agrupamento. A equipe do aplicativo precisa de mais planejamento para lidar com essa conversão de dados armazenados devido à nova configuração de agrupamento.
existem várias maneiras de fazer isso. Uma delas é copiar os dados da tabela existente para uma nova tabela criada com o novo agrupamento e, em seguida, substituir a tabela antiga pela nova. Você também pode mover os dados da tabela para um novo banco de dados com um novo agrupamento e substituir o banco de dados antigo pelo novo.
nota: alterar o agrupamento é uma tarefa complexa e você deve evitá-lo, a menos que tenha um caso comercial obrigatório.
como encontrar e alterar o Agrupamento de banco de dados no SQL Server?Vamos em frente e verificar o agrupamento de instância do SQL Server e todos os bancos de dados hospedados nessa instância. Você pode verificar o agrupamento acessando a janela Propriedades de nível de banco de dados ou instância usando o SQL Server Management Studio ou simplesmente executando a instrução T-SQL abaixo. O agrupamento para cada banco de dados é armazenado no System object sys.bancos de dados-vamos acessá-lo para obter essas informações.
--Check Database CollationSELECT name, collation_name FROM sys.databases GO --Check Server or Instance level CollationSELECT SERVERPROPERTY('Collation') As
--Check Database CollationSELECT name, collation_name FROM sys.databases GO --Check Server or Instance level CollationSELECT SERVERPROPERTY('Collation') As
executei a instrução T-SQL acima e obtive a saída abaixo. Podemos ver que todos os bancos de dados e agrupamento no nível do servidor têm as mesmas configurações que SQL_Latin1_General_CP1_CI_AS. Isso significa que os agrupamentos de banco de dados foram herdados pelo agrupamento no nível do servidor ao criá-los e o valor padrão não foi alterado.
Agora, deixe-me mostrar a você como verificar o agrupamento de banco de dados usando o GUI no SQL Server Management Studio.Primeiro, conecte-se à sua instância do SQL Server usando o SQL Server Management Studio. Expanda o nó de instância seguido pela pasta bancos de dados. Clique com o botão direito do mouse no banco de dados de destino e escolha Propriedades:
você obterá a janela Propriedades do banco de dados abaixo.
agora clique na guia Opções no painel do lado esquerdo. Você obterá várias configurações de Propriedades no painel do lado direito. Collation é a primeira propriedade desta página-você pode ver que é o mesmo que era no script T-SQL acima.
da mesma forma, você pode clicar no nó de instância do SQL Server e clicar com o botão direito do mouse nas propriedades de nível de instância para ver o agrupamento de nível de servidor.
se você quiser alterar esse agrupamento para um novo agrupamento, basta clicar no menu suspenso agrupamento e escolher a opção necessária. Certifique-se de ter feito um backup completo do seu banco de dados antes de fazê-lo.
eu escolhi um semelhante agrupamento com sensível a maiúsculas e minúsculas SQL_Latin1_General_CP1_CS_AS para este banco de dados e clicar em OK para aplicá-lo. Notar: Certifique-se de que ninguém esteja conectado ao banco de dados de destino durante este procedimento, caso contrário, você precisará alternar o modo para um único usuário e alterar essa configuração.
Você também pode alterar este agrupamento de banco de dados usando a instrução T-SQL. Para isso, use a cláusula COLLATE da instrução ALTER DATABASE.
primeiro, mudamos o banco de dados para o modo de usuário único, depois mudamos o agrupamento e, finalmente, movemos o banco de dados para o modo multiusuário.
--Change Database Collation using T-SQL USE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER
Liste todas as colações suportadas no SQL Server
esta seção mostrará como encontrar todas as colações disponíveis no SQL Server. Primeiro, deixe-me mostrar como obter a lista de todos os agrupamentos suportados para a instância do SQL Server.
SQL Server tem uma função de Sistema chamada fn_helpcollations () que você pode usar para buscar todas as colações.
execute o comando abaixo para exibir a lista.
--Display the list of all collations SELECT name, description FROM fn_helpcollations()
podemos ver todas as 5508 colações suportadas na seção de saída. Se você não tiver certeza de qual agrupamento escolher, poderá usar a cláusula WHERE no script abaixo para filtrar todas as colações possíveis que podem ser definidas no banco de dados.
digamos que você precisa para armazenar seus dados no idioma inglês e deseja que o SQL Server para lidar com ele em um caso-sensível formato. Você pode usar o comando abaixo para buscar a lista de colações possíveis e suportadas para sua consulta:
--Display the list of all collations with WHERE clause SELECT Name, Description FROM fn_helpcollations() WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%'
a saída mostra apenas 10 colações que satisfazem sua consulta. Você pode usar o script acima para filtrar várias colações.
Impacto da Mudança de Agrupamento de Banco de dados na Saída da Consulta
nesta seção, vou mostrar para você a diferença entre as duas saídas da mesma consulta quando eles são executados com diferentes agrupamentos.
primeiro, vou criar um banco de dados chamado MSSQL com um agrupamento (SQL_Latin1_General_CP1_CS_AS). Então eu executarei a mesma consulta duas vezes para obter a saída. Mais tarde, alterarei o agrupamento para SQL_Latin1_General_CP1_CI_AS e executarei novamente as mesmas consultas para obter sua saída. Você pode comparar as duas saídas e entender o impacto da alteração de um agrupamento de banco de dados. Então, vamos começar com a criação de banco de dados.
inicie a nova janela de criação de banco de dados, conforme mostrado na imagem abaixo. Você também pode criar este banco de dados usando T-SQL. Depois disso, você pode ver o nome do banco de dados e seus arquivos de dados. Agora, clique na segunda guia no painel do lado esquerdo para alternar para a janela de propriedade de agrupamento.
Você pode ver que o nome de agrupamento para este banco de dados é o padrão. Isso significa que esse banco de dados herdará o agrupamento do tipo de agrupamento no nível do servidor. Clique no menu suspenso agrupamento para escolher seu novo agrupamento.
selecionei o agrupamento abaixo SQL_Latin1_General_CP1_CS_AS para este banco de dados – não o padrão. Clique em OK para prosseguir com a criação do banco de dados.
Agora, verifique o agrupamento de banco de dados para um recém-criado banco de dados. Podemos ver que é SQL_Latin1_General_CP1_CS_AS como selecionamos na etapa anterior.
Em SQL_Latin1_General_CP1_CS_AS, CS representa o modo maiúsculo, e CI representa o case-insensitive modo. Agora você pode executar o código T-SQL abaixo ou qualquer código para obter a saída.
executei o mesmo comando duas vezes. O primeiro script filtra os nomes das colunas com um sys de valor em letras maiúsculas, enquanto o segundo script filtrará a mesma coluna com o mesmo sys de valor em letras minúsculas. A seção de saída demonstra que o primeiro script não mostrou nenhuma saída, enquanto o segundo script exibiu a saída por causa de seu comportamento sensível a maiúsculas e minúsculas.
Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
Agora, vamos alterar o agrupamento de banco de dados para o caso de agrupamento de diferenciação SQL_Latin1_General_CP1_CI_AS executando o abaixo instruções T-SQL. Você também pode alterá-lo via GUI acessando a janela Propriedades do banco de dados no SQL Server Management Studio.
--Change database collation to SQL_Latin1_General_CP1_CI_ASUSE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER
eu executei o script acima em um tiro, e o agrupamento de banco de dados foi alterado com sucesso para um novo agrupamento com suporte case-insensitive.
Você pode verificar essa alteração executando o abaixo scripts para verificar o agrupamento do recém-criado banco de dados MSSQL. Podemos ver que o novo agrupamento está definido para este banco de dados na imagem abaixo.
Vamos executar a mesma instrução T-SQL antes de alterar o agrupamento para ver o impacto desta alteração. Como podemos ver agora, ambas as instruções T-SQL estão na saída.
Conclusão
espero é evidente que o agrupamento em SQL Server é crucial. Definimos o impacto que isso deixa se você fizer alterações no agrupamento em qualquer nível no SQL Server. Sempre faça o planejamento adequado e teste as modificações em seu ambiente de ciclo de vida inferior primeiro.
fique atento ao meu próximo artigo, onde mostrarei um método passo a passo para alterar o agrupamento no nível do servidor.