将 XML 数据迁移到 Microsoft SQL Server 2016
Migrate XML data to Microsoft SQL Server 2016
我想将 XML 文件中的数据迁移到 MS SQL Server 2016
我的 Table 文件如下所示:
[propertyid], [type], [object], [keyname], [keyvalue]
table 中的数据将从 XML 映射而来,如下所示:
1, community, Private Community, name, Private Community
2, community, Private Community, communityname, Private Community
3, community, Private Community, server, chip.xyz.com:423132
4, community, Private Community, windowtitle, Private Community
5, community, Private Community, websiteurl, http://something
XML 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<object type="community">
<name>
<![CDATA[Private Community]]>
</name>
<communityname>
<![CDATA[Private Community]]>
</communityname>
<server>
<![CDATA[chip.xyz.com:423132]]>
</server>
<windowtitle>
<![CDATA[Private Community]]>
</windowtitle>
<websiteurl>
<![CDATA[http://something]]>
</websiteurl>
</object>
</doc>
有什么方法可以通过脚本或任何方式来完成,因为上面提到的 XML 只是我正在使用并有很多记录的大 XML 的一部分
这样试试:
DECLARE @xml XML=
'<?xml version="1.0" encoding="UTF-8"?>
<doc>
<object type="community">
<name>
Private Community
</name>
<communityname>
Private Community
</communityname>
<server>
chip.xyz.com:423132
</server>
<windowtitle>
Private Community
</windowtitle>
<websiteurl>
http://something
</websiteurl>
</object>
</doc>';
我替换了换行符和 trim 字符串,希望这符合您的需要
我不知道的是:如果有更多数据,结构如何。我的查询以 doc
为根,以 doc/name
为 "type",所有节点名称为 "keyname".
使用 "INTO MyNewlyCreatedTable" 可以即时创建具有所需结构的 table。如果你已经有了你的 table,你就把这行拿出来,在上面写一个合适的 INSERT INTO MyTable(colName1,colName2,...)
,然后是 SELECT ...
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS propertyid
,LTRIM(RTRIM(REPLACE(REPLACE(Doc.value('(object/@type)[1]','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS [type]
,LTRIM(RTRIM(REPLACE(REPLACE(Doc.value('(object/name)[1]','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS [object]
,LTRIM(RTRIM(REPLACE(REPLACE(Nod.value('local-name(.)','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS keyname
,LTRIM(RTRIM(REPLACE(REPLACE(Nod.value('.','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS keyvalue
INTO MyNewlyCreatedTable
FROM @xml.nodes('/doc') AS A(Doc)
CROSS APPLY Doc.nodes('object/*') AS B(Nod)
这是新建的内容table
SELECT * FROM MyNewlyCreatedTable;
+------------+-----------+-------------------+---------------+---------------------+
| propertyid | type | object | keyname | keyvalue |
+------------+-----------+-------------------+---------------+---------------------+
| 1 | community | Private Community | name | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 2 | community | Private Community | communityname | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 3 | community | Private Community | server | chip.xyz.com:423132 |
+------------+-----------+-------------------+---------------+---------------------+
| 4 | community | Private Community | windowtitle | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 5 | community | Private Community | websiteurl | http://something |
+------------+-----------+-------------------+---------------+---------------------+
仅供测试
--CleanUp
DROP TABLE MyNewlyCreatedTable;
我想将 XML 文件中的数据迁移到 MS SQL Server 2016
我的 Table 文件如下所示:
[propertyid], [type], [object], [keyname], [keyvalue]
table 中的数据将从 XML 映射而来,如下所示:
1, community, Private Community, name, Private Community
2, community, Private Community, communityname, Private Community
3, community, Private Community, server, chip.xyz.com:423132
4, community, Private Community, windowtitle, Private Community
5, community, Private Community, websiteurl, http://something
XML 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<object type="community">
<name>
<![CDATA[Private Community]]>
</name>
<communityname>
<![CDATA[Private Community]]>
</communityname>
<server>
<![CDATA[chip.xyz.com:423132]]>
</server>
<windowtitle>
<![CDATA[Private Community]]>
</windowtitle>
<websiteurl>
<![CDATA[http://something]]>
</websiteurl>
</object>
</doc>
有什么方法可以通过脚本或任何方式来完成,因为上面提到的 XML 只是我正在使用并有很多记录的大 XML 的一部分
这样试试:
DECLARE @xml XML=
'<?xml version="1.0" encoding="UTF-8"?>
<doc>
<object type="community">
<name>
Private Community
</name>
<communityname>
Private Community
</communityname>
<server>
chip.xyz.com:423132
</server>
<windowtitle>
Private Community
</windowtitle>
<websiteurl>
http://something
</websiteurl>
</object>
</doc>';
我替换了换行符和 trim 字符串,希望这符合您的需要
我不知道的是:如果有更多数据,结构如何。我的查询以 doc
为根,以 doc/name
为 "type",所有节点名称为 "keyname".
使用 "INTO MyNewlyCreatedTable" 可以即时创建具有所需结构的 table。如果你已经有了你的 table,你就把这行拿出来,在上面写一个合适的 INSERT INTO MyTable(colName1,colName2,...)
,然后是 SELECT ...
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS propertyid
,LTRIM(RTRIM(REPLACE(REPLACE(Doc.value('(object/@type)[1]','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS [type]
,LTRIM(RTRIM(REPLACE(REPLACE(Doc.value('(object/name)[1]','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS [object]
,LTRIM(RTRIM(REPLACE(REPLACE(Nod.value('local-name(.)','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS keyname
,LTRIM(RTRIM(REPLACE(REPLACE(Nod.value('.','varchar(max)'),CHAR(13),''),CHAR(10),''))) AS keyvalue
INTO MyNewlyCreatedTable
FROM @xml.nodes('/doc') AS A(Doc)
CROSS APPLY Doc.nodes('object/*') AS B(Nod)
这是新建的内容table
SELECT * FROM MyNewlyCreatedTable;
+------------+-----------+-------------------+---------------+---------------------+
| propertyid | type | object | keyname | keyvalue |
+------------+-----------+-------------------+---------------+---------------------+
| 1 | community | Private Community | name | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 2 | community | Private Community | communityname | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 3 | community | Private Community | server | chip.xyz.com:423132 |
+------------+-----------+-------------------+---------------+---------------------+
| 4 | community | Private Community | windowtitle | Private Community |
+------------+-----------+-------------------+---------------+---------------------+
| 5 | community | Private Community | websiteurl | http://something |
+------------+-----------+-------------------+---------------+---------------------+
仅供测试
--CleanUp
DROP TABLE MyNewlyCreatedTable;