Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从xml文件向SQL Server数据库添加行_Sql_Xml_Sql Server 2012 Express - Fatal编程技术网

从xml文件向SQL Server数据库添加行

从xml文件向SQL Server数据库添加行,sql,xml,sql-server-2012-express,Sql,Xml,Sql Server 2012 Express,我正忙于将一个网站从xml文件库转换为SQL Server 2012 express数据库,现在我已设法从xml中获取大部分标记,以便轻松地导入SQL Server 我现在的问题在于这些XML的一个特定部分 这是我遇到问题的部分 <?xml version="1.0" encoding="utf-16"?> <License xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w

我正忙于将一个网站从xml文件库转换为SQL Server 2012 express数据库,现在我已设法从xml中获取大部分标记,以便轻松地导入SQL Server

我现在的问题在于这些XML的一个特定部分

这是我遇到问题的部分

<?xml version="1.0" encoding="utf-16"?>
<License xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Reference>00b2d4cf-699c-4427-bcf0-a0ca456654c2</Reference>
 <MacAddresses>
  <string>00:0D:87:FE:9A:21</string>
  <string>00:20:ED:14:47:64</string>
  <string>00:13:D3:11:7C:D2</string>
  <string>00:13:D3:11:7C:D8</string>
  <string>00:19:D1:04:12:98</string>
  <string>00:19:66:C0:7F:AF</string>
 </MacAddresses>
</License>
我会手动操作,但我有700多个导入许可证,手动操作需要很长时间


如果您使用的是SQL Server 2005或更高版本,我们将不胜感激

如果您使用的是SQL Server 2005或更高版本,您可以使用本机XQuery支持从该XML中提取所需的数据,方法如下:

DECLARE @input XML = '<License xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Reference>00b2d4cf-699c-4427-bcf0-a0ca456654c2</Reference>
 <MacAddresses>
  <string>00:0D:87:FE:9A:21</string>
  <string>00:20:ED:14:47:64</string>
  <string>00:13:D3:11:7C:D2</string>
  <string>00:13:D3:11:7C:D8</string>
  <string>00:19:D1:04:12:98</string>
  <string>00:19:66:C0:7F:AF</string>
 </MacAddresses>
</License>'

SELECT
    Reference = License.value('(Reference)[1]', 'varchar(50)'),
    MacAddress = MacAddr.value('.', 'varchar(50)')
FROM
    @input.nodes('License') AS XTbl1(License)
CROSS APPLY
    License.nodes('MacAddresses/string') AS XTbl2(MacAddr)

当然,您也可以在
选择之前使用
插入dbo.YourTable(Reference,MacAddress)…
将此数据自动插入表中

使用XML解析器解析XML并插入结果数据。SQL只是结构化查询语言—许多数据库系统都使用这种语言,但不是数据库产品。。。很多东西,比如XML支持,都是高度特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)(请相应地更新标记)…@marc_s:他们中有没有人支持将XML直接导入表?@RobertHarvey:SQL Server有原生的XQuery支持,我相信Oracle和DB2有一些东西,太(不知道这些细节)我使用mssql 2012 express作为db产品
DECLARE @input XML = '<License xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Reference>00b2d4cf-699c-4427-bcf0-a0ca456654c2</Reference>
 <MacAddresses>
  <string>00:0D:87:FE:9A:21</string>
  <string>00:20:ED:14:47:64</string>
  <string>00:13:D3:11:7C:D2</string>
  <string>00:13:D3:11:7C:D8</string>
  <string>00:19:D1:04:12:98</string>
  <string>00:19:66:C0:7F:AF</string>
 </MacAddresses>
</License>'

SELECT
    Reference = License.value('(Reference)[1]', 'varchar(50)'),
    MacAddress = MacAddr.value('.', 'varchar(50)')
FROM
    @input.nodes('License') AS XTbl1(License)
CROSS APPLY
    License.nodes('MacAddresses/string') AS XTbl2(MacAddr)
Reference                              MacAddress
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:0D:87:FE:9A:21
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:20:ED:14:47:64
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:13:D3:11:7C:D2
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:13:D3:11:7C:D8
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:19:D1:04:12:98
00b2d4cf-699c-4427-bcf0-a0ca456654c2   00:19:66:C0:7F:AF