将 xml 列中的数据插入到临时表中

2023-12-07

我有一个 xml 列,看起来像

SET @XMLData = '<ArrayOfEntityNested xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
                                     xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak">
                   <EntityNested>
                       <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">1</Id>
                       <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">0001-01-01T00:00:00</Date>
                       <Description xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">deesc</Description>
                       <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak" i:nil="true" />
                   </EntityNested>
                 </ArrayOfEntityNested>'

我需要将 XML 中的数据插入到临时表中。

here

为此,我使用以下代码。但它不起作用,并且没有将任何数据插入临时表中。

--Variables Decleration
DECLARE @XMLData VARCHAR(MAX)
DECLARE @idoc INT

-- Creating Temporary Table
CREATE TABLE #TEMP_TABLE
(
    REC_ID INT IDENTITY(1,1),
    [Id] INT,
    [Date] VARCHAR(50),
    [Number] VARCHAR(50),
);

--Case 1
SET @XMLData = '<ArrayOfEntityNested xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
                                     xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak">
                   <EntityNested>
                      <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">1</Id>
                      <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">0001-01-01T00:00:00</Date>
                      <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak" i:nil="true" />
                   </EntityNested>
                </ArrayOfEntityNested>
                               '
--Reading Data from XML and inserting into Temp Table
EXECUTE sp_xml_preparedocument @idoc OUTPUT, @XMLData

INSERT INTO #TEMP_TABLE
   SELECT * 
   FROM OpenXML(@idoc,'/ArrayOfEntityNested/EntityNested', 1)
        WITH #TEMP_TABLE

EXECUTE sp_xml_removedocument @idoc

--Displaying data from Temp Table
SELECT * FROM #TEMP_TABLE
DROP TABLE #TEMP_TABLE;

但这不起作用,如果 xml 格式正确可能如下所示:

SET @XMLData = '<ArrayOfEntityNested>
                   <EntityNested>
                      <Id>1</Id>
                      <Date>0001-01-01T00:00:00</Date>
                      <Description>deesc</Description>
                      <EmployeeId>2</EmployeeId>
                      <IsDeleted>false</IsDeleted>
                      <LoadingPermitTruckId>7541</LoadingPermitTruckId>
                    </EntityNested>
                 </ArrayOfEntityNested>'

然后就可以了。

请帮我。


首先——请使用适当的数据类型!如果您的源数据是 XML - 为什么不使用XML数据类型?

另外,如果您有Date在你的桌子上 - 为什么那不是DATE or DATETIME类型??为什么是Number a VARCHAR(50) ??

没有意义......

然后:您不是在查看 XML 文档中存在的 XML 命名空间 - 但您must!

最后 - 我建议使用本机 XQuery 支持,而不是旧的、已弃用的sp_xml_preparedocument / OpenXML方法....

对我来说似乎更容易、更清晰......

用这个:

-- variable declaration
DECLARE @XMLData XML

-- creating temporary table
CREATE TABLE #TEMP_TABLE
(
    REC_ID INT IDENTITY(1,1),
    [Id] INT,
    [Date] DATETIME2(3),
    [Number] INT
); 

然后使用正确的 XQuery 语句,包括 XML 命名空间处理数据:

SET @XMLData = '<ArrayOfEntityNested xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
                                 xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak">
                    <EntityNested>
                       <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">1</Id>
                       <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">0001-01-01T00:00:00</Date>
                       <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak" i:nil="true" />
                    </EntityNested>
                    <EntityNested>
                       <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">42</Id>
                       <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">2013-12-22T14:45:00</Date>
                       <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">373</Number>
                    </EntityNested>
                 </ArrayOfEntityNested>'

;WITH XMLNAMESPACES ('http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak' AS ns1,
                'http://schemas.datacontract.org/2004/07/Gbms.Dto' AS ns2,
                'http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak' AS ns3)
INSERT INTO #TEMP_TABLE(ID, Date, Number)
   SELECT
  xc.value('(ns2:Id)[1]', 'int'),
  xc.value('(ns3:Date)[1]', 'DateTime2'),
  xc.value('(ns3:Number)[1]', 'int')
   FROM 
  @XmlData.nodes('/ns1:ArrayOfEntityNested/ns1:EntityNested') AS xt(xc)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 xml 列中的数据插入到临时表中 的相关文章

随机推荐

  • Tkinter focus_set 和 focus_force 未按预期工作

    我正在尝试拥有Entry打开新页面时获得焦点的字段 import tkinter as tk from tkinter import from tkinter import ttk class DIS tk Tk def init self
  • 如何临时模拟用户打开文件?

    我想暂时模拟域用户帐户以从 ASP NET 站点读取网络驱动器上的文件 我不想为整个站点设置模拟或在服务器上设置映射驱动器 我最终使用了代码Michiel van Otegem WindowsImpersonationContext 变得简
  • 状态栏问题

    正如您从我的图像中看到的 状态栏显示在我的表格视图的顶部 我不明白我做错了什么导致这种情况发生 我确信这将是一个简单的修复 但我只是想念它 任何帮助将不胜感激 谢谢 您可以通过在 ViewDidLoad 方法中编写以下代码来避免此问题 fl
  • 序列化/反序列化不同的属性名称?

    我有一个旧系统 在请求信息调用中返回 xml 其名称如下所示 邮政编码字段 名字字段 然后 同一系统有一个修改调用 它采用如下所示的 xml 邮政编码 名字 姓氏 有没有办法构建一个对象来反序列化请求 同时使用不同的名称序列化 xml 输出
  • 将 Linq-to-Sql 查询的 WHERE 子句作为参数传递

    这可能有点突破了 Linq to Sql 的界限 但考虑到到目前为止它的多功能性 我想我应该问一下 我有 3 个查询 它们选择相同的信息 仅在where子句 现在我知道我可以传递一个委托 但这只允许我过滤已经返回的结果 但我想通过参数构建查
  • $lookup 中其他连接条件的性能严重下降(使用管道)

    因此 在一些代码审查期间 我决定通过改进一个聚合来提高现有查询性能 如下所示 aggregate difference starts here lookup from sessions localField id foreignField
  • Android 10 中的 Android 开发者无 IMEI

    由于 Android 非常重视安全性 并试图让新的 Android 版本更加安全 因此开发人员很难跟上新的安全功能并找到旧方法的替代方案来使他们的应用程序与旧功能兼容 这个问题是关于新Android 10中的IMEI 旧方法通过使用以下代码
  • 创建在 Rust 中实现特征的对象向量

    用Java来说 我试图创建一个对象 严格实例 的集合 向量 每个对象都实现一个接口 特征 因此我可以迭代该集合并对所有对象调用一个方法 我已将其缩减为下面的一个示例文件 其中包含我希望能够更轻松地获得答案的所有部分 main rs try
  • 如何通过API检索Google Doc上文档的所有建议接受内容

    正如标题 我设法通过 API 检索 Google Docs 上所有建议接受的内容 我已经提到过它的指导方针 and 几个帖子但在这个平台上却是徒劳的 下面是我目前拥有的片段 请指教 function myFunction var docum
  • 使用 scipy.interpolate 进行样条表示:低振幅、快速振荡函数的插值效果较差

    我需要 以数字方式 计算我尝试使用两者的函数的一阶和二阶导数splrep and UnivariateSpline创建样条曲线以对函数进行插值以获取导数 然而 对于大小为 10 1 或更低的函数 样条表示本身似乎存在固有问题and正在 快速
  • 当使用 WinSCP 选择要上传到 FTP 服务器的文件的掩码与文件不匹配时,SSIS 任务失败

    我正在创建一个 SSIS 包 它使用脚本任务 通过 WinSCP 将文件上传到 FTP 上传工作正常 但是如果没有上传文件 我需要该过程失败 目前它只是循环并成功通过 在 WinSCP 命令文件中编写脚本方面还没有获得任何帮助 option
  • 如何在selenium中查找具有多个类的元素

    我有一个包含 3 个类的元素 我需要用 selenium 找到它
  • 文本转语音(TTS)-Android

    我是android平台的新手 现在我正在努力TTS Text to Speech 如果我在文本区域中输入文本 并且希望在单击 发言 按钮时将其转换为语音 谁能帮我吗 文本转语音功能内置于 Android 1 6 中 这是一个如何执行此操作的
  • 如何获取 TextView 的精确位置(以像素为单位)?

    我有一部 2560 x 1440 像素的智能手机 现在我正在使用这个功能TextView int locationOnScreen new int 2 txtAp GetLocationInWindow locationOnScreen 它
  • 为具有圆角的 UIImageView 创建阴影?

    我正在尝试创建一个ImageView它有圆角和阴影以赋予它一些深度 我能够为UIImageView 但是每当我添加代码以使其具有圆角时 它只有圆角而没有阴影 我有一个IBOutlet named myImage 并且它位于viewDidLo
  • pandas 中的单列

    有没有办法在不影响数据框其余部分的情况下对 pandas 中的单个列进行舍入 gt gt gt print df item value1 value2 0 a 1 12 1 3 1 a 1 50 2 5 2 a 0 10 0 0 3 b 3
  • 在哪里以及如何定义应用程序属性? - JHIpster

    在 Spring Boot 中 可以在 application properties 文件中定义应用程序属性 例如 Rest 的前缀可以定义为 spring data rest basePath api 对于基于 Spring Boot 的
  • 游标如何引用已删除的行?

    当我从 Android 中的 sqlite 数据库查询返回游标时 它似乎包含固定数量的行 无论数据库发生什么情况 这些行都不会改变 例如 如果在光标打开时删除了某些行 我仍然可以引用已删除的行 这很好 但是它是如何工作的呢 一种猜测可能是
  • 哪些 Boost 功能与 C++11 重叠?

    几年前 我把我的 C 技能束之高阁 现在看来 当我再次需要它们时 情况已经发生了变化 我们现在有了 C 11 我的理解是它重叠了许多 Boost 功能 是否有一些总结 这些重叠在哪里 哪些 Boost 库将成为遗产 建议使用哪些 C 11
  • 将 xml 列中的数据插入到临时表中

    我有一个 xml 列 看起来像 SET XMLData