2009-07-28 88 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 

有趣的是,我的第二個替換似乎並沒有得到實施。嗯我調查一些更多...

歡呼的迴應