2010-08-05 5 views
2

Je suis en train de l'importation de données à partir d'une base de données MySQL dans l'héritage SQL Server 2005.SQL Server - essayer de convertir la colonne XML échoue

J'ai une table en particulier qui me provoque la douleur. Je l'ai importé de MySQL en utilisant un serveur lié et le pilote ODBC MySQL, et je finis avec ceci:

Col Name   Datatype MaxLen 
OrderItem_ID  bigint  8 
PDM_Structure_ID int   4 
LastModifiedDate datetime 8 
LastModifiedUser varchar 20 
CreationDate  datetime 8 
CreationUser  varchar 20 
XMLData   text  -1 
OrderHeader_ID  bigint  8 
Contract_Action varchar 10 
ContractItem  int   4 

Mon objectif principal est la colonne XMLData - Je dois lui et nettoyer faire en sorte que je peux le convertir en un type de données XML pour utiliser XQuery.

Je me suis donc l'option de la table « grandes données sur la ligne » à 1:

EXEC sp_tableoption 'OrderItem', 'large value types out of row', 1 

puis-je aller de l'avant et de convertir XMLData-VARCHAR(MAX) et faire un nettoyage du XML stocké dans ce domaine. Tout va bien jusqu'à présent.

Mais quand je vais maintenant essayer de convertir cette colonne XML type de données:

ALTER TABLE dbo.OrderItem 
    ALTER COLUMN XMLData XML 

Je reçois ce message ici:

Msg 511, niveau 16, état 1, ligne 1
Impossible créer une ligne de taille 8077 dont est supérieure au maximum autorisé taille de ligne de 8060. La déclaration a été terminée .

qui est assez surprenant, vu que les colonnes en dehors de la XMLData ne représentent environ 90 octets, et je des instructions spécifiques SQL Server pour stocker toutes « grandes quantités de données » hors ligne ....

Alors pourquoi SQL Server refuse-t-il de convertir cette colonne en données XML ??? Des idées?? Pensées?? Choses que je peux vérifier/changer dans mon approche ??

Mise à jour: Je ne sais pas ce qui a changé, mais sur une deuxième tentative d'importer les données brutes de MySQL dans SQL Server, j'ai été avec succès en mesure de convertir cette NTEXT -> VARCHAR (MAX) à XML la fin ..... impair ..... anyhoo - fonctionne maintenant - merci les gars pour tous vos commentaires et suggestions! Grandement apprécié !

+0

Avez-vous l'exemple de code pour répliquer ceci? –

+0

@Ed Harper: Je peux vous donner mon extrait de code, mais la partie difficile est la suivante: ce code fonctionne très bien sur trois tables, et échoue seulement sur cette table en question .... –

Répondre

1

Si vous disposez d'un espace de stockage suffisant, vous pouvez essayer de choisir à partir de la version VARCHAR(MAX) de la table dans une nouvelle table avec le même schéma, mais avec XMLData mis en place comme XML - soit en utilisant SELECT INTO ou en créant explicitement la table avant de commencer . PS: c'est un problème secondaire non lié à votre problème, mais vous pouvez vérifier que vous ne perdez pas de caractères Unicode dans le champ MySQL XMLData original par cette conversion, car les types de données text/varchar ne les supportent pas .

+0

J'ai essayé ceci - en extrayant juste l'ID et le XML - qui a fonctionné. Cependant, je ne pouvais pas le récupérer dans la table d'origine (même erreur encore) –

+0

@marc_s - pouvez-vous copier avec succès la table entière dans un nouveau, y compris la conversion? Si oui, vous pouvez simplement laisser tomber l'original. –

1

Pouvez-vous ajouter une nouvelle colonne de type xml?

Si tel est le cas, ajoutez la nouvelle colonne xml, mettez à jour la table pour définir la nouvelle colonne comme étant égale à la colonne XmlData, puis supprimez la colonne XmlData.

Modifier
I possède une table "TestTable" avec une colonne "nvarchar (max)".

select * from sys.tables where name = 'TestTable' 

Cela donne un résultat contenant:

[lob_data_space_id] [text_in_row_limit] [large_value_types_out_of_row] 
1     0     0 

encore je peux heureusement sauver 500k caractères dans mon champ nvarchar (max).

Que obtenez-vous si vous interrogez sys.tables pour votre table OrderItems?

Si votre [text_in_row_limit] n'est pas nul, essayez ce qui devrait convertir toutes les chaînes existantes en-ligne dans BLOBs:

exec sp_tableoption 'OrderItems', 'text in row', 0 

et puis essayer de passer de nvarchar (max) au format XML.

De BOL,

Désactivation du texte dans l'option de ligne ou réduire la limite de l'option exiger la conversion de tous les BLOBs; par conséquent, le processus peut être long, en fonction du nombre de chaînes BLOB qui doivent être converties. La table est verrouillée pendant le processus de conversion .

+0

Je peux en ajouter un, oui - mais je rencontre la même erreur à la fin ..... –

Questions connexes