如何将数据从xml保存到sql 2008?
如何将数据从xml保存到sql 2008 SQL表: [dbo].[位置] [ID][int]标识1,1不为空, [ImoNo][numeric]8,0不为空, [sid][numeric]5,0空, [VesselName][nvarchar]20空, [time][datetime]不为空, [lat][numeric]9,2空, [lon][numeric]9,2空, [sog][numeric]9,2空, [cog][numeric]9,2空, [hdg][数字]9,2空, [eta][datetime]空, [NextPort][nvarchar]20空 XML文件: 发现2艘船只。 符合事实的 9456159 780 特伦塔 特伦塔 1832900 7570400 2014-01-14T08:28:45Z 0 9.5 22 22 2014-01-15T12:00:00 广阳 1872560 7589000 2014-01-14T07:00:00Z 1. 10.8 25 25 9144055 789 维帕瓦 维帕瓦 1757160 7536240 2014-01-13T19:00:00Z 2. 9.4 21 21 1658200 7476480 2014-01-13T07:00:00Z 3. 8.4 29 29 1630000 7455400 2014-01-13T03:00:03Z 4. 8.83 34 34 2014-01-15T08:00:00 广阳 我尝试使用此查询,但得到错误消息如何将数据从xml保存到sql 2008?,sql,sql-server,xml,sql-server-2008,soap,Sql,Sql Server,Xml,Sql Server 2008,Soap,如何将数据从xml保存到sql 2008 SQL表: [dbo].[位置] [ID][int]标识1,1不为空, [ImoNo][numeric]8,0不为空, [sid][numeric]5,0空, [VesselName][nvarchar]20空, [time][datetime]不为空, [lat][numeric]9,2空, [lon][numeric]9,2空, [sog][numeric]9,2空, [cog][numeric]9,2空, [hdg][数字]9,2空, [eta][
'XQuery [nodes()]: The names "SOAP-ENV" and "ns1:" do not denote a namespace.'
声明@xml
声明@character VARCHARMAX
选择@character=x.y
来自OPENROWSET批量“C:\Users\Nale\Desktop\POS.xml”,单字符
-把安培表修好
选择@xml=REPLACE@character'&','&;'
-获取理货信息
选择
x、 y.value'ns1:imono/text[1],'NUMERIC 8,0'imono,
x、 y.value'ns1:sid/text[1],'NUMERIC 5,0'sid,
x、 y.value'ns1:VesselName/text[1],'NVARCHAR 20'VesselName,
x、 y.value'ns1:pasttrack/time/text[1],'DATETIME'时间,
x、 y.value'ns1:pasttrack/lat/text[1],'NUMERIC 9,2'lat,
x、 y.value'ns1:pasttrack/lon/text[1],'NUMERIC 9,2'lon,
x、 y.value'ns1:pasttrack/sog/text[1],'NUMERIC 9,2'sog,
x、 y.值'ns1:pasttrack/cog/text[1],'NUMERIC 9,2'cog,
x、 y.值'ns1:pasttrack/hdg/text[1],'NUMERIC 9,2'hdg,
x、 y.值'ns1:pasttrack/eta/text[1],'DATETIME'eta,
x、 y.value'ns1:pasttrack/NextPort/text[1],'NVARCHAR 20'NextPort
从@xml.nodes'SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:GetPositionsResponse/Body/shipsWithPositions'作为xy
XML文件位于本地磁盘上
我将使用一些sql查询,或者将数据从xml保存到sql表的最佳方法是什么
使XML有效
发现2艘船只。
符合事实的
9456159
780
特伦塔
特伦塔
1832900
7570400
2014-01-14T08:28:45Z
0
9.5
22
22
2014-01-15T12:00:00
广阳
1872560
7589000
2014-01-14T07:00:00Z
1.
10.8
25
25
9144055
789
维帕瓦
维帕瓦
1757160
7536240
2014-01-13T19:00:00Z
2.
9.4
21
21
1658200
7476480
2014-01-13T07:00:00Z
3.
8.4
29
29
1630000
7455400
2014-01-13T03:00:03Z
4.
8.83
34
34
2014-01-15T08:00:00
广阳
二,。将名称空间添加到查询中
DECLARE @xml XML
DECLARE @character VARCHAR(MAX)
SELECT @xml = x.y
FROM OPENROWSET( BULK 'C:\Users\Nale\Desktop\POS.xml', SINGLE_CLOB ) x(y)
-- Get the tally information
;WITH XMLNAMESPACES (
'http://www.fleettracker.de/api/1.0' as ns1,
'http://www.w3.org/2001/XMLSchema-instance' AS xsi,
'http://schemas.xmlsoap.org/soap/envelope/' AS e
)
SELECT
x.y.value('(ns1:imono/text())[1]', 'NUMERIC (8,0)') ImoNo,
x.y.value('(ns1:sid/text())[1]', 'NUMERIC (5,0)') sid,
x.y.value('(ns1:VesselName/text())[1]', 'NVARCHAR (20)') VesselName,
x.y.value('(ns1:pasttrack/time/text())[1]', 'DATETIME') time,
x.y.value('(ns1:pasttrack/lat/text())[1]', 'NUMERIC (9,2)') lat,
x.y.value('(ns1:pasttrack/lon/text())[1]', 'NUMERIC (9,2)') lon,
x.y.value('(ns1:pasttrack/sog/text())[1]', 'NUMERIC (9,2)') sog,
x.y.value('(ns1:pasttrack/cog/text())[1]', 'NUMERIC (9,2)') cog,
x.y.value('(ns1:pasttrack/hdg/text())[1]', 'NUMERIC (9,2)') hdg,
x.y.value('(ns1:pasttrack/eta/text())[1]', 'DATETIME') eta,
x.y.value('(ns1:pasttrack/NextPort/text())[1]', 'NVARCHAR (20)') NextPort
FROM @xml.nodes('e:Envelope/e:Body/ns1:GetPositionsResponse/body/shipsWithPositions') AS x(y)