2009-07-28 89 views
0

我怎么去int参数插入到这里的XML修改INSERT语句时许例如:插入INT到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 

香港专业教育学院试图转换,投竟然发现SQL:变量,但似乎没有任何工作? :(

+0

什么版本的SQL Server你对付? – 2009-07-28 09:55:15

+0

sql 2005 SMSS 9.0 – Mike 2009-07-28 09:56:10

回答

2

在SQL Server 2008(这是极少数新的XML相关的功能之一,我相信),你可以写这样的:

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 

,但我在2005年很害怕,这韩元't work(yet),AFAIK在“插入”XML DML语句中使用sql:变量是SQL Server 2008中的新增功能。从SQL Server 2005开始,您可以在其他地方使用sql:变量(例如replace value of等) 。最多

马克

PS:好吧,所以在2005年,我不是10 0%知道这是否会工作(手头没有2005年再进行测试),但你可以尝试:

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 

只是让你@myInt变量VARCHAR(MAX)并连接在一起的字符串.modify语句。

0

我在最后使用了替换,tbh该列实际上是一个带有XML的NTEXT(旧的设计来自前一个站点)。我想转换为XML并使用所有可爱的@ XMLPARAM.modify功能,然后转换回来,但这些都是我最后做的。

--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 

有趣的是,我的第二个替换似乎并没有得到实施。嗯我调查一些更多...

欢呼的回应