Domanda

Ho una tabella che ha il campo ntext . MSDN afferma che ntext è deprecato e loro suggerire altri tipi di dati:

  

i tipi di dati ntext, text e image verranno rimossi in una versione futura di Microsoft SQL Server. Evitare di utilizzare questi tipi di dati nel nuovo lavoro di sviluppo e pianificare di modificare le applicazioni che attualmente li utilizzano. Utilizzare invece nvarchar (max), varchar (max) e varbinary (max).

Nel mio caso particolare è stato deciso di passare a varbinary (max) . Ho provato a modificare la definizione della tabella ma non ha funzionato.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

Quali sono le possibilità di cambiare il tipo in varbinary (max) ? ho provato a cambiare il tipo da ntext - > nvarchar (max) e poi da nvarchar (max) - > varbinary (max) ma ciò non è possibile (errore: conversione implicita dal tipo di dati nvarchar (max) a varbinary (max) non consentita).

L'unica soluzione funzionante è aggiungere una nuova colonna di tipo varbinary (max) , convertire il valore esistente nella nuova colonna e quindi rilasciare la vecchia colonna. Questo richiede MODO TROPPO tempo (sul mio set di dati di circa 15 GB ci vogliono circa 30 minuti). Ecco perché sto studiando altre possibilità per ottenere lo stesso (possibilmente sul posto = senza spostare dati e conversioni).

È stato utile?

Soluzione

Suppongo che tu abbia scelto varbinary (max) perché la tua colonna ntext conteneva dati non testuali? In tal caso, penso che dovrai aggiungere una colonna varbinary (max) separata alla tabella, quindi eseguire un'operazione di conversione per copiare dal ntext alla nuova colonna. Quindi, elimina la vecchia colonna e rinomina la nuova colonna con il vecchio nome.

" Conversione implicita dal tipo di dati nvarchar (max) a varbinary (max) non è consentita " significa che dovrai essere esplicito sulla conversione.

Altri suggerimenti

Sembra che questa conversione dovrà avvenire ad un certo punto. Se esegui una ricerca, troverai molte persone che vanno dal testo a varchar (max) e affermano che la conversione richiede oltre 20 minuti. I miei due centesimi dopo aver fatto ricerche per alcuni minuti, quindi non prenderlo come vangelo.

Se la tabella accetta solo inserti, è possibile convertire i dati esistenti in una tabella di conservazione e quindi rinominare le tabelle in modo che la conservazione sia quindi in produzione. Quindi spostare i dati appena creati dalla vecchia tabella durante i tempi di inattività.

La gestione degli aggiornamenti rende ovviamente le cose più complesse.

L'aggiunta della colonna aggiuntiva è probabilmente il modo migliore per procedere. Preferisco fare questo genere di cose a passi per ridurre i rischi

  1. Aggiungi la colonna varbinary (max) come nullable
  2. Modifica il tuo codice di inserimento per popolare entrambe le colonne
  3. A tuo piacimento, per esempio durante la notte, esegui l'istruzione UPDATE con CAST
  4. Rimuovi tutto il supporto del codice per la vecchia colonna, assicurati che la nuova colonna venga letta
  5. Elimina la vecchia colonna e modifica la nuova colonna in modo che non sia nulla se necessario
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top