当前位置: 首页 > 知识库问答 >
问题:

使用OPENXML命令和XMLNS将XML导入SQL server

隗昀
2023-03-14

我有以下代码将xml导入SQL

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT @XML = XMLData FROM XMLwithOpenXML

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT rid, uid
FROM OPENXML(@hDoc, '/PportTimetable/Journey')
WITH 
(
rid [varchar](50) '@rid',
uid [varchar](100) '@uid'
)

EXEC sp_xml_removedocument @hDoc
GO
<PportTimetable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" timetableID="20161018020822" xmlns="http://www.thalesgroup.com/rtti/XmlTimetable/v8">
  <Journey rid="201610188012733" uid="P12733" trainId="2J27" ssd="2016-10-18" toc="AW">
</Journey>
</PportTimetable>

共有1个答案

龙霖
2023-03-14

我建议完全跳过openxml内容,而使用SQL Server中内置的本机XQuery支持:

declare @input XML = '<PportTimetable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" timetableID="20161018020822" xmlns="http://www.thalesgroup.com/rtti/XmlTimetable/v8">
    <Journey rid="201610188012733" uid="P12733" trainId="2J27" ssd="2016-10-18" toc="AW">
    </Journey>
</PportTimetable>'

-- define your XML namespaces - here, there's only a single "default" namespace    
;WITH XMLNAMESPACES(DEFAULT 'http://www.thalesgroup.com/rtti/XmlTimetable/v8')
SELECT 
    RID = XC.value('@rid', 'varchar(50)'),
    UID = XC.value('@uid', 'varchar(20)'),
    TrainId = XC.value('@trainId', 'varchar(25)'),
    SSD = XC.value('@ssd', 'varchar(25)'),
    TOC = XC.value('@toc', 'varchar(20)')
FROM 
    @input.nodes('/PportTimetable/Journey') AS XT(XC)

使用XQuery.nodes()函数将XML“分解”为XML片段的“内联”表(在本例中,每个 节点一个),然后使用.value()函数从这些XML片段中逐个获取单个元素和属性。

 类似资料:
  • 问题内容: 我知道寻求这种帮助并不是一件容易的事,但是我已经坚持了一段时间-现在我正在阅读两本C#书,每天工作超过9个小时。 好的,这是我的问题:我有一个几乎完整的WinForms C#应用程序。在SQL中,我有三个看起来像这样的表: 我在本地磁盘上有XML文件,用于导入这三个表-XML看起来像这样: 再一次让我感到尴尬,以这种方式请求帮助,但是我将尽一切可能尝试支持StackOverflow。

  • 问题内容: 我正在尝试将很大的.csv文件(〜4gb)导入mysql。我正在考虑使用phpmyadmin,但是您的最大上传大小为2mb。有人告诉我,我必须使用命令行。 我打算按照以下说明将其导入:http : //dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680 将.csv表中的第一行设置为mysql表中的列名的命令是什么?该选项可通过p

  • 本文向大家介绍mysql导入导出命令解析,包括了mysql导入导出命令解析的使用技巧和注意事项,需要的朋友参考一下 mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。下面就让我们一起学习吧! 一、mysqldump:数据库备份程序  有3种方式来调用mysqldump: 如果没有指定任

  • 问题内容: 在线上有许多教程可为Android应用添加语音识别。它们常常令人困惑,并且编码的发布者永远也不会提出问题。我需要一个带有完整编码的简单教程,以向我的应用添加语音识别。 问题答案: 如果要将语音识别添加到小组的Android应用中,这非常简单。 在整个教程中,您需要在粘贴代码时添加导入。 创建一个xml文件或使用现有的xml文件,并确保添加一个按钮和一个listview。 在Java类中

  • 问题内容: 我有一个简单的Python问题,我的大脑停滞不前。此代码段有效。但是,当我用phoneNumber替换“ 258 494-3929”时,出现以下错误: 顺便说一句,我没有和尝试使用的情况下 我还能缺少什么? 问题答案: 您应该使用而不是,而不必调用,因为此函数本身返回一个字符串:

  • 问题内容: 我一直在使用psql Postgres终端使用以下命令将CSV文件导入表中 除了必须登录到psql终端以运行它之外,该方法运行良好。 我想知道是否有人从Linux shell命令行中知道执行类似于此命令的方法的方法,类似于Postgres如何允许像下面这样的shell命令 这允许从Linux Shell中转储数据库而无需登录到psql终端。 问题答案: 如PostgreSQL文档(II