2009-07-28 8 views
0

Comment allez-je insérer au sujet d'un paramètre int dans un xml modifier instruction d'insertion am exemple ici:insert int dans la colonne xml sql

DECLARE @holdxml xml 
DECLARE @myInt xml 

set @myInt = 10 

SET @holdxml = (SELECT CAST(VehicleManufacturerXML as xml) FROM VehicleManufacturers WHERE VehicleManufacturerID = 496); 

SET @holdxml.modify('insert <VehicleManufacturerID>cast(@myInt, varchar(max))</VehicleManufacturerID> into (/VehicleManufacturers)[1]') 

select @holdxml as x 

ive essayé convertir, jeter sql même trouvé: variable, mais rien ne semble travail? :(

+0

Quelle version de SQL Server travaillez-vous? –

+0

sql 2005 SMSS 9.0 – Mike

Répondre

2

Dans SQL Server 2008 (et qui est l'un des très peu de nouvelles fonctionnalités liées à XML, je crois), vous pourriez écrire quelque chose comme:

DECLARE @holdxml xml 
DECLARE @myInt xml 

set @myInt = '<VehicleManufacturerID>abc</VehicleManufacturerID>' 

SET @holdxml = (SELECT CAST(VehicleManufacturerXML as xml) FROM VehicleManufacturers WHERE VehicleManufacturerID = 496); 

SET @holdxml.modify('insert sql:variable("@myInt") into (/VehicleManufacturers)[1]') 

select @holdxml as x 

mais je crains en 2005, a gagné L'utilisation de la variable sql: dans une instruction XML DML "insert" est nouvelle dans SQL Server 2008. Vous pouvez utiliser sql: variable dans d'autres endroits (par exemple replace value of et autres) à partir de SQL Server 2005 et Je ne suis pas d'accord 10, donc en 2005,:. jusqu'à

Marc

PS 0% sûr si cela fonctionnera (ne pas 2005 à portée de main plus pour le tester), mais vous pouvez essayer:

DECLARE @holdxml xml 
DECLARE @myInt VARCHAR(MAX) 

set @myInt = '<VehicleManufacturerID>abc</VehicleManufacturerID>' 

SET @holdxml = (SELECT CAST(VehicleManufacturerXML as xml) FROM VehicleManufacturers WHERE VehicleManufacturerID = 496); 

SET @holdxml.modify('insert ' + @myInt + ' into (/VehicleManufacturers)[1]') 

select @holdxml as x 

Assurez votre variable @myInt VARCHAR (MAX) et concaténer ensemble de la chaîne dans la Instruction .modify.

+0

désolé marc_s je ne me suis pas rendu compte que je n'avais pas mis à jour l'exemple de code @myInt était ment à 123. et malheureusement cela ne fonctionne pas je reçois l'erreur suivante: Msg 8172, niveau 16, état 1, ligne 8 L'argument 1 de la méthode de type de données xml "modifier" doit être une chaîne littérale. – Mike

+0

Je veux aussi spécifier la partie "into (// node) [1]" dynamiquement. Quelqu'un peut-il me dire comment faire cela? –

0

J'ai utilisé le remplacement à la fin, la colonne est en fait un NTEXT avec XML dedans (ancien design d'un site précédent). Je voulais convertir en XML et utiliser toutes les fonctionnalités de @ XMLPARAM.modify, puis les convertir, mais c'est ce que j'ai fait à la fin.

--Update Vehicle Options XML 

DECLARE @VOXML as nvarchar(MAX) 
SET @VOXML = (SELECT VehicleOptions.VehicleOptionXML FROM VehicleOptions WHERE VehicleOptions.VehicleOptionID = @VehOptionID) 
SET @VOXML = replace(@VOXML, '<VehicleOptionID></VehicleOptionID>', '<VehicleOptionID>'+cast(@VehOptionID as nvarchar(MAX))+'</VehicleOptionID>') 
SET @VOXML = replace(@VOXML, '<VehicleModelID title=""Model""></VehicleModelID>', '<VehicleModelID title=""Model"">'+cast(@VehModelID as nvarchar(MAX))+'</VehicleModelID>') 

UPDATE VehicleOptions 
SET VehicleOptionXML = @VOXML 
WHERE VehicleOptions.VehicleOptionID = @VehOptionID 

intéressant, mon deuxième remplacement ne semble pas être mis en œuvre. hmm j'étudie un peu plus ...

acclame pour la réponse

Questions connexes