Pergunta

Eu tenho uma tabela que tem campo ntext. MSDN diz que ntext é obsoleto e eles sugerem outros tipos de dados:

ntext, tipos de texto, dados e imagem será removida em uma versão futura do Microsoft SQL Server. Evitar o uso desses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que atualmente usam-los. Use nvarchar (max), varchar (max) e varbinary (max) em seu lugar.

No meu caso particular, foi decidido mudar para varbinary(max). Eu tentei alterar a definição da tabela, mas isso não funcionou.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);
?

Quais são as possibilidades de mudar o tipo de varbinary(max) Eu tentei mudar o tipo de ntext -> nvarchar(max) e depois de nvarchar(max) -> varbinary(max) mas isso não é possível (erro: Conversão implícita de dados tipo nvarchar (max) para varbinary (max) não é permitido).

A única solução de trabalho é para adicionar uma nova coluna do tipo varbinary(max), converter o valor existente para a nova coluna e, em seguida, descartar a coluna de idade. Isso leva maneira muito tempo muito (no meu conjunto de dados de cerca de 15 GB demora cerca de 30 minutos). É por isso que eu estou investigando outras possibilidades para alcançar o mesmo (possivelmente no local = sem mover dados e conversão).

Foi útil?

Solução

Eu presumo que você foi com varbinary (max), porque a sua coluna ntext tinha dados não textuais em que? Nesse caso, eu acho que você vai ter que adicionar coluna um varbinary separado (max) para a sua mesa, em seguida, executar uma operação de conversão para copiar a partir do ntext para a nova coluna. Em seguida, elimine a coluna de idade, e mudar o nome da nova coluna para o nome antigo.

"Conversão implícita de tipo de dados nvarchar (max) para varbinary (max) não é permitido" significa que você vai ter que ser explícito sobre a conversão.

Outras dicas

Parece que esta conversão é vai ter que acontecer em algum momento. Se você procurar, você vai encontrar muitas pessoas que vão de texto para varchar (max) e afirmando que leva mais de 20 minutos para converter. Meus dois centavos depois de pesquisar por alguns minutos, por isso não levá-lo como um evangelho.

Se a tabela só tem inserções, você poderia converter os dados existentes em uma tabela de retenção e, em seguida, renomear as tabelas de modo a exploração ser seguida de produção. Em seguida, mova todos os dados recém-criados da tabela antiga durante o seu tempo para baixo.

Manipulação atualizações torna as coisas mais complexas, é claro.

Adicionando a coluna extra é provavelmente o melhor caminho a percorrer. Sou a favor de fazer este tipo de coisa em medidas para reduzir os riscos

  1. Adicione o coluna varbinary (max) como anulável
  2. Modifique o seu código de inserção para preencher ambas as colunas
  3. Para o seu lazer, dizer durante a noite, executar a instrução UPDATE com CAST
  4. Remova todo o apoio código para a coluna de idade, garantir nova coluna é lida
  5. Queda da coluna de idade, e alterar a nova coluna a ser não nulo, se necessário
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top