SQL Server 2008R2 和创建 XML 文档

2024-06-19

论坛上的第一篇文章,因为我真的被这个问题困住了。

以下查询正确地将有效的 XML 文档分配给 @xTempXML 变量(类型为 xml)。注:文档的长度(转换为varchar(max) = 711

select @xTempXML = (
        select 
            PrescriberFirstName     as "row/prescriber/name/first",
            PrescriberLastName      as "row/prescriber/name/last",
            PrescriberAddress1      as "row/prescriber/address/line1",
            PrescriberAddress2      as "row/prescriber/address/line2",  
            PrescriberCity          as "row/prescriber/address/city",
            PrescriberState         as "row/prescriber/address/state",
            PrescriberZipCode       as "row/prescriber/address/zipcode",
            PatientFirstName        as "row/patient/name/first",
            PatientLastName         as "row/patient/name/last",
            PatientMiddleName       as "row/patient/name/middle",
            PatientAddress1         as "row/patient/address/line1",
            PatientAddress2         as "row/patient/address/line2", 
            PatientCity             as "row/patient/address/city",
            PatientState            as "row/patient/address/state",
            PatientZipCode          as "row/patient/address/zipcode",
            PatientFileID           as "row/patient/fileid",
            PatientSSN              as "row/patient/ssn",
            PatientDOB              as "row/patient/dob",
            DrugDescription         as "row/medicationprescribed/description",
            DrugStrength            as "row/medicationprescribed/strength",
            DrugDEASchedule         as "row/medicationprescribed/deaschedule",
            DrugQty                 as "row/medicationprescribed/qty",
            DrugDirections          as "row/medicationprescribed/directions",
            DrugFormCode            as "row/medicationprescribed/form",
            DrugDateWritten         as "row/medicationprescribed/writtendate",
            DrugEffectiveDate       as "row/medicationprescribed/effectivedate",
            DrugRefillQty           as "row/medicationprescribed/refill/qty",
            DrugRefillQtyQualifier  as "row/medicationprescribed/refill/qualifier",
            DrugNote                as "row/medicationprescribed/note",
            PharmacyStoreName       as "row/pharmacy/storename",
            PharmacyIdentification  as "row/pharmacy/identification",
            PharmacyAddress1        as "row/pharmacy/address/line1",
            PharmacyAddress2        as "row/pharmacy/address/line2",
            PharmacyCity            as "row/pharmacy/address/city",
            pharmacyState           as "row/pharmacy/address/state",
            pharmacyZipCode         as "row/pharmacy/address/zipcode"
        from 
            Rxarchive
         where ArchiveUUID=@ArchiveRefUUID
           and CreatedDT between @RptParamStartDT and  @RptParamStopDT
           and CHARINDEX(',' + PrescriberFID + ',', ',' + @RptParamFID + ',') > 0 
        FOR XML PATH(''), ROOT('result'), TYPE
        )

declare @sXMLVersion varchar(max) = '<?xml version="1.0" encoding="utf-8"?>'
select len(@sXMLVersion + convert(varchar(max),@xTempXML))

注意:连接字符串的长度 = 749,这是正确的。

set @xFinalXML = convert(xml,(@sXMLVersion + CAST(@xTempXML as varchar(max))))

select LEN(convert(varchar(max),@xFinalXML))

注意:这个变量的长度又回到了711!

select @xFinalXML

该变量仍然是有效的 XML 文档,只是没有版本信息

我究竟做错了什么?

非常感谢任何和所有帮助!


您在测试中错过了一个步骤。尝试这个:

SELECT CONVERT(XML, '<?xml version="1.0" encoding="utf-8"?>')

它将返回一个空单元格。

根据您正在做的事情(即最终转换为 VARCHAR),没有理由从 XML 数据类型开始。您不妨删除, TYPE来自FOR XML子句然后连接@sXMLVersion + @xTempXML

发生这种情况的原因如下:xml 数据类型的限制 http://technet.microsoft.com/en-us/library/ms187107.aspx

将 XML 数据存储在 XML 中时,不会保留 XML 声明 PI,例如 xml数据类型实例。这是设计使然。数据转换为类型后,XML 声明 () 及其属性(版本/编码/独立)会丢失xml。 XML 声明被视为 XML 解析器的指令。 XML 数据在内部存储为 ucs-2。 XML 实例中的所有其他 PI 均被保留。

这里记录了如何正确处理从 XML 字段/变量中提取数据:XML 最佳实践 http://msdn.microsoft.com/en-us/library/ms187508.aspx(在“文本编码”下)

SQL Server 2005 以 Unicode (UTF-16) 存储 XML 数据。从服务器检索的 XML 数据采用 UTF-16 编码。如果您想要不同的编码,则必须对检索到的数据执行所需的转换。有时,XML 数据可能采用不同的编码。如果是,则在数据加载期间必须小心。例如:

  • 如果您的文本 XML 采用 Unicode(UCS-2、UTF-16)格式,则可以将其分配给 XML 列、变量或参数,不会出现任何问题。
  • 如果编码不是 Unicode 并且是隐式的,则由于源代码页的原因,数据库中的字符串代码页应与要加载的代码点相同或兼容。如果需要,请使用 COLLATE。如果不存在这样的服务器代码页,则必须使用正确的编码添加显式 XML 声明。
  • 要使用显式编码,请使用varbinary()类型,与代码页没有交互,或者使用适当代码页的字符串类型。然后,将数据分配给 XML 列、变量或参数。

示例:显式指定编码
假设您有一个 XML 文档 vcdoc,存储为 varchar(max),并且没有显式 XML 声明。以下语句添加编码为“iso8859-1”的 XML 声明,连接 XML 文档,将结果转换为varbinary(最大)以便保留字节表示形式,然后最终将其转换为 XML。这使得 XML 处理器能够根据指定的编码“iso8859-1”解析数据,并为字符串值生成相应的 UTF-16 表示形式。

SELECT CAST(
    CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))
  AS XML)

以下 S.O.问题相关:

  • SQL Server 2008 - 将 XML 声明添加到 XML 输出 https://stackoverflow.com/questions/4184163/sql-server-2008-add-xml-declaration-to-xml-output

  • 如何将 xml 编码 添加到 SQL Server 中的 xml 输出 https://stackoverflow.com/questions/9002403/how-to-add-xml-encoding-xml-version-1-0-encoding-utf-8-to-xml-output-in

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2008R2 和创建 XML 文档 的相关文章

随机推荐

  • 如何在 Moderngl EGL 后端添加深度缓冲区?

    此代码渲染一个带有抗锯齿功能的彩色三角形 samples 8 当深度缓冲线depth attachment ctx depth texture 512 512 samples 8 被评论 但是当我添加深度缓冲区时 它会在绑定处返回 GL 错
  • 使用图表时避免使用“激活”和“选择”(Excel)

    我知道使用Activate and Select在 Excel 中 VBA 不是最佳实践 我看过有关如何在处理范围时避免它们的参考资料 例如 LINK https stackoverflow com questions 10714251 e
  • 使用 Scala 进行网页抓取 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JavaScript 跨浏览器单击 HTML DOM 元素

    是否有可用的普通 JavaScript 跨浏览器函数能够触发 HTML DOM 元素 包括 div 等非表单元素 上的单击事件 大多数走这条路的人要么最终开发自己的事件管理系统 这并不难 但很烦人 要么在可用的功能范围内工作 如果所有浏览器
  • 如何创建在特定范围内开始和结束的条形图

    我创建了一个计算机模型 只是为了好玩 来预测足球比赛结果 我进行了计算机模拟来预测一支球队将获得多少分 我得到了每个团队的模拟结果列表 我想绘制诸如置信区间之类的东西 但使用条形图 我考虑了以下选择 我考虑过使用 matplotlib 的烛
  • 如何删除 Apache Kafka 中的多个主题

    假设我有许多具有相同前缀的主题 例如 giorgos topic1 giorgos topic2 giorgos topic3 用于删除单个主题的命令 例如giorgos topic1 如下 bin kafka topics sh zook
  • Postgresql 一张表的多个计数

    我想从表中的两列中获得这些列中值的统一计数 例如 两列是 表 报告 type place one home two school three work four cafe five friends six mall one work one
  • 何时/为何使用/定义接口[重复]

    这个问题在这里已经有答案了 可能的重复 何时最好使用 java 中的接口 https stackoverflow com questions 2586389 when best to use an interface in java Hi
  • 视图绑定对应用程序大小的影响有多大?

    View Binding 按照文档的规定 为每个XML元素生成一个Binding类 以方便访问和检查 并减轻如下的时间负担 findViewById 虽然findViewById通过更昂贵的关联搜索进行操作 由于映射 绑定应该 直接 访问
  • 如何设置引导开关的 css 颜色?

    如何在此引导开关中将蓝色更改为另一种颜色 我尝试更改输入元素的颜色和背景颜色 但它没有更改开关颜色 这是 html 和 bootstraplink https getbootstrap com docs 4 2 components for
  • 计算从给定日期开始的月份中的第几天?

    我正在努力寻找一种简单有效的解决方案来计算每月的工作日 例如 如果给定日期是第一个星期一Monday 5th March 2018然后我想获取接下来 6 个月每个月第一个星期一的日期 例如 Monday 2nd April 2018 and
  • 如何从 SOAP 响应中删除额外的结果标签

    我知道这个问题以前曾被问过 但我在任何地方都找不到答案 问题是我的 asmx 文件中有以下代码 namespace IrancellSmsServer SoapDocumentService RoutingStyle SoapService
  • Java-线程与CPU的关系

    我对多线程还很陌生 我正在开发一个项目 尝试在我的 Java 程序中使用 4 个 CPU 我想做类似的事情 int numProcessors Runtime getRuntime availableProcessors ExecutorS
  • URL 路由中的点与命名空间 Rails 3.1

    我有这个路线 rb root to gt posts index devise for users controllers gt omniauth callbacks gt users omniauth callbacks resource
  • Pandas.read_excel 有时会错误地将布尔值读取为 1/0

    我需要将一个非常大的 Excel 文件读入 DataFrame 中 该文件包含字符串 整数 浮点和布尔数据 以及丢失的数据和完全空的行 还值得注意的是 某些单元格值源自单元格公式和 或 VBA 尽管理论上这不会影响任何内容 正如标题所示 p
  • Eloquent 模型中的 UUID 主键存储为 uuid 但返回为 0

    我有一个 mysql 表 其中使用 UUID 作为主键 这是创建迁移 Schema create people function Blueprint table table gt uuid id table gt primary id ta
  • 如何单击网络浏览器控件中的按钮?

    例如 使用代码并且没有用户输入 我如何让我的程序点击 google 上的 搜索 按钮 假设我已经填写了搜索框并且位于 google com webBrowser1 Navigate http www google com 如果你有一个ID用
  • 在 std::thread 创建的线程中调用 pthread_sigmask 是一个好习惯吗?

    1 我是 std thread 的新手 我想知道调用是否是一个好的做法pthread sigmask 阻止某些信号特别的线程创建者std thread 我不希望新线程接收SIGTERM SIGHUP等信号 因为主进程已经安装了这些信号的处理
  • 禁用和启用 html 输入按钮

    所以我有一个像这样的按钮
  • SQL Server 2008R2 和创建 XML 文档

    论坛上的第一篇文章 因为我真的被这个问题困住了 以下查询正确地将有效的 XML 文档分配给 xTempXML 变量 类型为 xml 注 文档的长度 转换为varchar max 711 select xTempXML select Pres