Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để lưu dữ liệu từ xml sang sql 2008?

  1. Làm cho XML hợp lệ
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:ns1="http://www.fleettracker.de/api/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <ns1:GetPositionsResponse>
            <body>
                <result>Found 2 vessels.</result>
                <success>true</success>
                <shipsWithPositions xsi:type="ns1:FleettrackerShip">
                    <ns1:imono>9456159</ns1:imono>
                    <ns1:sid>780</ns1:sid>
                    <ns1:name>Trenta</ns1:name>
                    <ns1:charterShipName>Trenta</ns1:charterShipName>
                    <ns1:pasttrack>
                        <lat>1832900</lat>
                        <lon>7570400</lon>
                        <timestamp>2014-01-14T08:28:45Z</timestamp>
                        <orderNumber>0</orderNumber>
                        <sog>9.5</sog>
                        <cog>22</cog>
                        <hdg>22</hdg>
                        <eta>2014-01-15T12:00:00</eta>
                        <nextport>KWANGYANG</nextport>
                    </ns1:pasttrack>
                    <ns1:pasttrack>
                        <lat>1872560</lat>
                        <lon>7589000</lon>
                        <timestamp>2014-01-14T07:00:00Z</timestamp>
                        <orderNumber>1</orderNumber>
                        <sog>10.8</sog>
                        <cog>25</cog>
                        <hdg>25</hdg>
                    </ns1:pasttrack>
                </shipsWithPositions>
                <shipsWithPositions xsi:type="ns1:FleettrackerShip">
                    <ns1:imono>9144055</ns1:imono>
                    <ns1:sid>789</ns1:sid>
                    <ns1:name>Vipava</ns1:name>
                    <ns1:charterShipName>Vipava</ns1:charterShipName>
                    <ns1:pasttrack>
                        <lat>1757160</lat>
                        <lon>7536240</lon>
                        <timestamp>2014-01-13T19:00:00Z</timestamp>
                        <orderNumber>2</orderNumber>
                        <sog>9.4</sog>
                        <cog>21</cog>
                        <hdg>21</hdg>
                    </ns1:pasttrack>
                    <ns1:pasttrack>
                        <lat>1658200</lat>
                        <lon>7476480</lon>
                        <timestamp>2014-01-13T07:00:00Z</timestamp>
                        <orderNumber>3</orderNumber>
                        <sog>8.4</sog>
                        <cog>29</cog>
                        <hdg>29</hdg>
                    </ns1:pasttrack>
                    <ns1:pasttrack>
                        <lat>1630000</lat>
                        <lon>7455400</lon>
                        <timestamp>2014-01-13T03:00:03Z</timestamp>
                        <orderNumber>4</orderNumber>
                        <sog>8.83</sog>
                        <cog>34</cog>
                        <hdg>34</hdg>
                        <eta>2014-01-15T08:00:00</eta>
                        <nextport>KWANGYANG</nextport>
                    </ns1:pasttrack>
                </shipsWithPositions>
            </body>
        </ns1:GetPositionsResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2. Thêm không gian tên vào truy vấn của bạn

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải pháp thay thế cho con trỏ để lặp sql là gì?

  2. OPTION (RECOMPILE) luôn nhanh hơn; Tại sao?

  3. Làm cách nào để mở rộng các giá trị được phân tách bằng dấu phẩy thành các hàng riêng biệt bằng SQL Server 2005?

  4. Ngăn chặn SQL Injection trong ASP.Net

  5. Quyền truy vấn dbo.sysobjects