[英]Insert XML Node into a SQL column in a table
我有一個XML文件,我將其傳遞給存儲過程。
我也有一張桌子。 該表有VehicleReg |列 XML | ProcessedDate
我的XML就是這樣的:
<vehicles>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
</vehicles>
我需要做的是讀取xml並將vehiclereg和整車xml字符串插入每一行(dateprocessed是getdate()所以不是問題)。
我正在做類似下面的事情,但沒有運氣:
DECLARE @XmlData XML
Set @XmlData = EXAMPLE XML
SELECT T.Vehicle.value('(vehiclereg)[1]', 'NVARCHAR(10)') AS vehiclereg,
T.Vehicle.value('.', 'NVARCHAR(MAX)'),
GETDATE()
FROM @XmlData.nodes('Vehicles/Vehicle') AS T(Vehicle)
我想知道是否有人可以指出我正確的方向?
問候
只需要記住XML區分大小寫。 你有過:
FROM @XmlData.nodes('Vehicles/Vehicle') AS T(Vehicle)
但你應該有:
FROM @XmlData.nodes('/vehicles/vehicle') AS T(Vehicle)
此外,TT指出沒有名為Registration
列
這應該這樣做:
DECLARE @XmlData XML
Set @XmlData = '<vehicles>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
</vehicles>'
SELECT Vehicle.value('(vehiclereg)[1]', 'NVARCHAR(10)') AS vehiclereg,
Vehicle.value('.', 'NVARCHAR(MAX)'),
GETDATE()
FROM @XmlData.nodes('/vehicles/vehicle') AS T(Vehicle)
結果:
這將返回XML:
DECLARE @XmlData XML
Set @XmlData = '<vehicles>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
</vehicles>'
SELECT T.Vehicle.value('(vehiclereg)[1]', 'NVARCHAR(10)') AS vehiclereg,
T.Vehicle.query('.'),
GETDATE()
FROM @XmlData.nodes('vehicles/vehicle') AS T(Vehicle)
結果:
完整查詢,如您所願:
DECLARE @XmlData XML
Set @XmlData = '<vehicles>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
</vehicles>'
SELECT T.Vehicle.value('./vehiclereg[1]', 'NVARCHAR(10)') AS vehiclereg,
T.Vehicle.query('.'),
GETDATE()
FROM @XmlData.nodes('/vehicles/vehicle') AS T(Vehicle)
您可以通過XML.query()
獲取XML,在這種情況下,在vehicles/vehicle
節點上query('.')
以獲取內部XML。
DECLARE @x XML=
'<vehicles>
<vehicle>
<vehiclereg>AB12CBE</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
<vehicle>
<vehiclereg>AB13QQT</vehiclereg>
<anotherprop>BLAH</anotherprop>
</vehicle>
</vehicles>';
DECLARE @t TABLE(VehicleReg VARCHAR(128),[XML] XML,ProcessedDate DATETIME);
INSERT INTO @t(VehicleReg,[XML],ProcessedDate)
SELECT VehicleReg=n.v.value('(vehiclereg)[1]','VARCHAR(128)'),
[XML]=n.v.query('.'),
ProcessedDate=GETDATE()
FROM @x.nodes('vehicles/vehicle') AS n(v);
SELECT * FROM @t;
結果:
+------------+------------------------------------------------------------------------------------+-------------------------+
| VehicleReg | XML | ProcessedDate |
+------------+------------------------------------------------------------------------------------+-------------------------+
| AB12CBE | <vehicle><vehiclereg>AB12CBE</vehiclereg><anotherprop>BLAH</anotherprop></vehicle> | 2016-03-01 15:21:37.640 |
| AB13QQT | <vehicle><vehiclereg>AB13QQT</vehiclereg><anotherprop>BLAH</anotherprop></vehicle> | 2016-03-01 15:21:37.640 |
+------------+------------------------------------------------------------------------------------+-------------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.