2010-06-16 8 views
1

Je dois mettre à jour un document XML stocké dans une base de données Microsoft SQL Server, mais le fournisseur du produit a choisi de stocker le code XML dans une colonne TEXT.Comment faire pour obtenir la variable XML Sql Server dans la colonne TEXT

J'ai pu extraire le TEXT dans une variable de type XML et effectuer la mise à jour dont j'ai besoin sur le xml dans cette variable, mais quand j'essaye de mettre à jour la colonne pour repasser à la base de données, avoir des ennuis. En regardant dans la documentation, il semble qu'il ne soit pas possible de simplement CAST/CONVERT une variable de type XML pour l'insérer dans une colonne TEXT, mais je pense qu'il y a un moyen d'extraire la "chaîne" xml du fichier XML. tapez la variable et mettez à jour la colonne en utilisant cette valeur.

Toutes les suggestions sont appréciées, mais je voudrais garder la solution pure SQL qu'il peut être exécuté directement (pas de fonction personnalisée C#, etc.); juste pour garder l'impact sur la base de données minimale.

(note: est-ce pas un peu absurde que vous ne pouvez pas CAST XML en tant que texte, je dis juste ...?)

+1

texte a été dépréciée départ dans SQL Server 2005. Une chance que vous pouvez cette information pour changer le type de données à NVARCHAR ?: http://msdn.microsoft.com/en-us/library/ms187993%28SQL. 90% 29.aspx –

Répondre

2

Coulée du XML en tant que VARCHAR (MAX) fonctionne.

declare @xml xml 

declare @tblTest table (
    Id int, 
    XMLColumn text 
) 

insert into @tblTest 
    (Id, XMLColumn) 
    values 
    (1, '<MyTest><TestNode>A</TestNode></MyTest>') 

set @xml = '<MyTest><TestNode>A</TestNode><TestNode>B</TestNode></MyTest>' 

update @tblTest 
    set XMLColumn = cast(@xml as varchar(max)) 
    where Id = 1 

select Id, XMLColumn from @tblTest 
+0

Amusant, je revenais juste pour poster ceci comme réponse à ma propre question ... Je devrais vérifier plus souvent! – jasongullickson

+0

Oui, il semble y avoir une conversion implicite entre VARCHAR (MAX) et TEXT - donc mon casting en deux étapes n'est vraiment pas nécessaire. –

Questions connexes