Pregunta

Tengo una tabla que tiene el campo ntext . MSDN dice que ntext está en desuso y Sugerir otros tipos de datos:

  

Los tipos de datos ntext, text e image se eliminarán en una versión futura de Microsoft SQL Server. Evite usar estos tipos de datos en nuevos trabajos de desarrollo y planee modificar las aplicaciones que los usan actualmente. Utilice nvarchar (max), varchar (max) y varbinary (max) en su lugar.

En mi caso particular, se decidió cambiar a varbinary (max) . Traté de alterar la definición de la tabla, pero eso no funcionó.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

¿Cuáles son las posibilidades de cambiar el tipo a varbinary (max) ? intenté cambiar el tipo de ntext - > nvarchar (max) y luego desde nvarchar (max) - > varbinary (max) pero eso no es posible (error: la conversión implícita del tipo de datos nvarchar (max) a varbinary (max) no está permitida).

La única solución de trabajo es agregar una nueva columna de tipo varbinary (max) , convertir el valor existente a la nueva columna y luego soltar la columna anterior. Esto lleva MUCHO MUCHO tiempo (en mi conjunto de datos de aproximadamente 15 GB, tarda aproximadamente 30 minutos). Es por eso que estoy investigando otras posibilidades para lograr lo mismo (posiblemente in situ = sin mover datos y conversión).

¿Fue útil?

Solución

Supongo que fuiste con varbinary (max) porque tu columna ntext tenía datos no textuales. En ese caso, creo que tendrá que agregar una columna varbinary (max) separada a su tabla, luego ejecutar una operación de conversión para copiar del ntext a la nueva columna. Luego, elimine la columna anterior y cambie el nombre de la nueva columna por el nombre anterior.

" La conversión implícita del tipo de datos nvarchar (max) a varbinary (max) no está permitida " significa que tendrá que ser explícito sobre la conversión.

Otros consejos

Parece que esta conversión tendrá que suceder en algún momento. Si busca, encontrará muchas personas que van de texto a varchar (max) y declaran que tarda más de 20 minutos en convertirse. Mis dos centavos después de investigar durante unos minutos, así que no lo tomes como evangelio.

Si su tabla solo toma inserciones, puede convertir los datos existentes en una tabla de retención y luego cambiar el nombre de las tablas para que la retención sea producción. Luego mueva los datos recién creados de la tabla anterior durante su tiempo de inactividad.

Manejar actualizaciones hace que las cosas sean más complejas, por supuesto.

Agregar la columna adicional es probablemente la mejor manera de hacerlo. Estoy a favor de hacer este tipo de cosas en pasos para reducir los riesgos

  1. Agregue la columna varbinary (max) como anulable
  2. Modifique su código de inserción para llenar ambas columnas
  3. En su tiempo libre, digamos de la noche a la mañana, ejecute la instrucción UPDATE con un CAST
  4. Elimine todo el soporte de código para la columna anterior, asegúrese de leer la nueva columna
  5. Descarte la columna anterior y cambie la nueva columna para que no sea nula si es necesario
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top