AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 337
Accepted
rem
rem
Asked: 2011-01-07 01:17:30 +0800 CST2011-01-07 01:17:30 +0800 CST 2011-01-07 01:17:30 +0800 CST

Como alterar o agrupamento do SQL Server

  • 772

Como posso alterar o agrupamento padrão do SQL Server 2008 R2 Express para todo o servidor e um banco de dados específico?

Existe uma maneira de fazer isso usando a interface visual do SQL Server Management Studio? Na janela Propriedades do Servidor (e na janela Propriedades do Banco de Dados correspondente), esta propriedade não está disponível para edição.

sql-server sql-server-2008
  • 4 4 respostas
  • 68295 Views

4 respostas

  • Voted
  1. Best Answer
    CoderHawk
    2011-01-07T02:06:21+08:002011-01-07T02:06:21+08:00

    Sim.

    Você pode alterar o agrupamento padrão da instância expressa do SQL Server 2008 R2 e bancos de dados individuais, mas é uma tarefa complexa.

    Infelizmente, não há opção visual para fazê-lo via SSMS.

    O SQL Server 2008 oferece suporte à configuração de agrupamentos nos seguintes níveis:

    • Servidor

    • Base de dados

    • Coluna

    • Expressão

    As configurações de instalação padrão são determinadas pela localidade do sistema Windows. O agrupamento no nível do servidor pode ser alterado durante a instalação ou alterando a localidade do sistema Windows antes da instalação. mais...

    Configurando e alterando o agrupamento de servidores - SQL Server 2008

    • Certifique-se de ter todas as informações ou scripts necessários para recriar seus bancos de dados de usuário e todos os objetos neles.

    • Exporte todos os seus dados usando uma ferramenta como o utilitário bcp. Para obter mais informações, consulte Importar e exportar dados em massa.

    • Elimine todos os bancos de dados do usuário.

    • Reconstrua o banco de dados mestre especificando o novo agrupamento na propriedade SQLCOLLATION do comando setup

    • Crie todos os bancos de dados e todos os objetos neles.

    • Importe todos os seus dados.

    Configurando e alterando o agrupamento de banco de dados - SQL Server 2008

    • Defina a COLLATIONopção na CREATE DATABASEinstrução ao criar um novo banco de dados.

    • Da mesma forma, defina as COLLATIONopções na ALTER DATABASEinstrução para alterar o agrupamento de um banco de dados existente.

      ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

    Configurando e alterando o agrupamento de colunas

    • Alguns dos agrupamentos de colunas permanecerão os mesmos mesmo depois que você alterar o agrupamento do banco de dados. Nesse caso, você deve modificar o agrupamento das colunas individuais.
    • 25
  2. AndrewSQL
    2011-01-18T19:52:51+08:002011-01-18T19:52:51+08:00

    Certifique-se de que você realmente deseja "descartar" os bancos de dados do usuário, conforme observado na resposta acima. Você pode apenas querer "desanexar" os bancos de dados. Ou, na verdade, você não pode fazer nada, pois a reconstrução do mestre remove efetivamente todos os links para os bancos de dados do usuário. Há momentos em que os bancos de dados são criados no agrupamento desejado, mas o servidor não. Você não gostaria de ter que recuperar todos os seus bancos de dados de usuários de backups neste caso.

    • 6
  3. Jeffry
    2011-11-03T14:18:08+08:002011-11-03T14:18:08+08:00

    Eu fiz algo assim e funcionou, mas você deve ter em mente que os índices que estão apontando para o tipo de dados como text/varchar/nvarchar devem ser descartados, execute o script e crie os índices.

    USE YourDataBase
    GO
    
    DECLARE @Table_Name NVARCHAR(100)
    SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns
    
    --- if null will set to all tables
    
    DECLARE @TempTable AS TABLE
    (
    ID INT IDENTITY
    ,TableName NVARCHAR(100)
    ,ColumnName NVARCHAR(100)
    ,TypeName NVARCHAR(100)
    ,Max_length INT
    ,Collation_Name NVARCHAR(100)
    ,EnterDtm DATETIME DEFAULT GETDATE()
    )
    DECLARE @NewCollation NVARCHAR(100)
    SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE
    
    INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
    SELECT 
    QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
    ,all_columns.name AS ColumnName
    ,type_name(all_columns.user_type_id)
    ,all_columns.max_length
    ,all_columns.collation_name  
    from sys.all_columns INNER JOIN sys.tables ON
    tables.object_id = all_columns.object_id
    AND collation_name IS NOT NULL
    AND all_columns.collation_name != @NewCollation
    WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)
    
    
    DECLARE @TableID SMALLINT
    SET @TableID = (SELECT MIN(ID) FROM @TempTable)
    
    DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
    ,@Size INT
    
    WHILE @TableID IS NOT NULL
    BEGIN
        SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
        SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
        SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
        SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID) 
    
        SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation  
        PRINT (@Query)
    
        SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
    END 
    

    esta é minha primeira resposta postada desculpe minha bagunça

    • 5
  4. Solomon Rutzky
    2019-05-01T07:10:14+08:002019-05-01T07:10:14+08:00

    Exportar todos os dados (incluindo logins, servidores vinculados, trabalhos do SQL Agent, configurações do DB Mail etc.) e reconstruir os dados no nível da instância, além de recarregar todos os dados do usuário, é muito trabalhoso. E, mesmo depois de tudo isso, ainda não há garantia de que você possa atualizar o agrupamento padrão de um banco de dados via ALTER DATABASEporque existem várias condições que impedirão a conclusão da operação (consulte a seção "Alterando o agrupamento do banco de dados" da ALTER DATABASEdocumentação para obter detalhes) .

    Existe, no entanto, um método não documentado que é muito mais fácil. A principal desvantagem é que não é suportado. Isso não quer dizer que algo vai dar errado, apenas que, se algo acontecer, a Microsoft não ajudará a corrigi-lo (porque eles nunca garantiram que funcionaria).

    O método de que falo está sendo executado sqlservr.execom o -q {new_collation_name}switch. Há um pouco mais do que isso, mas essa é a ideia básica. Esse método simplesmente atualiza os metadados do sistema, o que traz benefícios e consequências, sendo os principais:

    BENEFÍCIOS

    • muito rápido
    • contornar a maioria das restrições que impedem ALTER DATABASEde trabalhar
    • provavelmente muito mais preciso do que qualquer script que as pessoas criaram ao longo dos anos para descartar e recriar objetos

    DESVANTAGENS

    • sem suporte se algo der errado
    • VARCHARos dados podem mudar, SE a página de código for diferente entre os agrupamentos antigo e novo, e existirem caracteres com valores de 128 - 255 (0x80 - 0xFF) e esses caracteres não existirem como o mesmo caractere com o mesmo valor no novo código página. Portanto, existe o potencial de perda de dados, e seus dados precisam ser pesquisados ​​primeiro para garantir que essa condição não exista. Mas isso também significa que há muitos casos com apenas caracteres com valores de 0 a 127 que não estão em perigo, mesmo que a página de código seja alterada.
    • Os tipos de tabela definidos pelo usuário (UDTTs) são ignorados e precisam ser atualizados manualmente.

    Para uma descrição detalhada do que o sqlservr.exe -qmétodo faz e não faz (incluindo detalhes sobre como os agrupamentos funcionam nos vários níveis e possíveis problemas a serem observados), consulte minha postagem:

    Alterando o agrupamento da instância, os bancos de dados e todas as colunas em todos os bancos de dados do usuário: o que pode dar errado?

    Para alterar apenas a instância (incluindo os bancos de dados do sistema: master, model, msdbe tempdb) e um ou mais bancos de dados (mas não todos os bancos de dados), basta desanexar o(s) banco(s) de dados que você deseja excluir desta operação e, em seguida, reanexá-los assim que a atualização do agrupamento for concluída.

    • -1

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve