• sqlserver 解析导入xml


    XML文件内容=XMLDATA

    1. <Root>
    2. <Customer UserId="505" UserCode="90099" UserName="22">
    3. <Order orderid="1" sum="199">
    4. <OrderDetail OrderID="543" ProductID="90099" Quantity="12" DeptId="25" DeptNo="25" DeptName="JIM" />
    5. <OrderDetail OrderID="544" ProductID="90100" Quantity="5" DeptId="25" DeptNo="25" DeptName="TOM" />
    6. </Order>
    7. </Customer>
    8. <Customer UserId="505" UserCode="90099" UserName="22">
    9. <Order orderid="2" sum="299">
    10. <OrderDetail OrderID="545" ProductID="90101" Quantity="2" DeptId="25" DeptNo="25" DeptName="lily" />
    11. <OrderDetail OrderID="546" ProductID="90102" Quantity="6" DeptId="25" DeptNo="25" DeptName="lilei" />
    12. </Order>
    13. </Customer>
    14. </Root>

    首先创建一个表,用来存储XML

    1. CREATE TABLE XMLwithOpenXML
    2. (
    3. Id INT IDENTITY PRIMARY KEY ,
    4. XMLData XML ,
    5. LoadedDateTime DATETIME
    6. )

    向表中插入本地XML文件

    1. INSERT INTO XMLwithOpenXML (XMLDATA ,LoadedDateTime )
    2. SELECT CONVERT (XML ,BulkColumn )AS BulkColumn ,GETDATE ()
    3. FROM OPENROWSET (BULK 'C:\Users\Administrator\Desktop\xml\TaskConfig.xml' ,SINGLE_BLOB )AS X ;

    执行时提示

    由于无法打开文件 "C:\Users\Administrator\Desktop\xml\TaskConfig.xml",无法进行大容量加载。操作系统错误代码为 3(系统找不到指定的路径。)。
    1. --开启外围应用配置器(OpenRowset 和 OpenDataSource)
    2. EXEC sp_configure 'show advanced options', 1
    3. GO
    4. RECONFIGURE
    5. GO
    6. EXEC sp_configure 'Ad Hoc Distributed Queries', 1
    7. GO
    8. RECONFIGURE
    9. GO

    执行插入语句

    1. --关闭外围应用配置器
    2. exec sp_configure 'Ad Hoc Distributed Queries',0
    3. reconfigure
    4. exec sp_configure 'show advanced options',0
    5. reconfigure

    解析xml

    DECLARE @hdoc int;  --执行存储过程sp_xml_preparedocument 需要返回的结果,存储在缓存中。
    DECLARE @doc varchar(1000);  --将xml文件数据赋值给@doc
    SELECT @doc =convert(varchar(1000),XMLDATA) FROM  XMLwithOpenXML WHERE ID=3

    --执行存储过程,解析XML文件
    EXEC sp_xml_preparedocument @hdoc output,@doc;

    --使用OPENXML()格式化xml文件。
    select * from openxml (@hdoc,'Root/Customer/Order/OrderDetail',1)
    with (OrderID int,ProductID VARCHAR(10),Quantity INT,DeptName varchar(10))
    --执行存储过程 释放缓存
    EXEC sp_xml_removedocument @hdoc 

    --放在文本节点
    DECLARE @xml XML
    SET @xml=(SELECT XMLDATA FROM XMLwithOpenXML);
    DECLARE @str int
    EXEC sp_xml_preparedocument @str OUTPUT, @xml
    --SELECT * FROM OPENXML(@str,'/Data/Lot',2)
    SELECT * FROM OPENXML(@str,'/Root/TaskList/Task',2)
    WITH (TaskID NVARCHAR(50),CronCode NVARCHAR(50),Meno NVARCHAR(300),TaskUrl NVARCHAR(200) ,TaskToken NVARCHAR(100),Cron NVARCHAR(100),IsFast bit,IsDel bit,[State] bit)
    EXEC sys.sp_xml_removedocument @str

  • 相关阅读:
    计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI
    从入门到进阶 之 ElasticSearch 配置优化篇
    [面试直通版]操作系统之编程语言与运行原理(下)
    【PAT甲级】1023 Have Fun with Numbers
    c++ noexcept
    Spring 事务
    mac苹果电脑系统最好用的清理软件CleanMyMac2024功能介绍及如何激活解锁许可证
    图解LeetCode——816. 模糊坐标(难度:中等)
    浅谈云原生Cloud Native
    内网环境下通过tar包在Linux环境下安装MySQL
  • 原文地址:https://blog.csdn.net/zuoming120/article/details/128185896