将编码信息添加到 FOR XML 的结果中[重复]

2023-12-14

我有一个脚本,它在 SQL 2008 中使用 FOR XML 返回 XML。有没有办法在输出的开头添加版本和编码信息。最终,我计划将输出保存在文件中。

例如,现在我的输出看起来像这样

<Agents>
  <Agent id="1">
    <Name>Mike</Name>
    <Location>Sanfrancisco</Location>
  </Agent>
  <Agent id="2">
    <Name>John</Name>
    <Location>NY</Location>
  </Agent>
</Agents>

我想追加以下行<?xml version="1.0" encoding="UTF-8"?>在 Xml 输出的开头

所以我想要的输出是这样的

<?xml version="1.0" encoding="UTF-8"?>
<Agents>
 <Agent id="1">
   <Name>Mike</Name>
   <Location>Sanfrancisco</Location>
 </Agent>
<Agent id="2">
  <Name>John</Name>
  <Location>NY</Location>
</Agent>

正如 @gbn 中指出的另一个答案 and on 另一个问题, "XML 数据在内部存储为 ucs-2",并且 SQL Server 在生成数据时不包含它。但是,您可以将 XML 转换为字符串并手动在开头附加 XML 声明。但是,在声明中简单地使用 UTF-8 是不准确的。 SQL 生成的 Unicode 字符串是 UCS-2 格式的。例如,这将失败:

SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UTF-8"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));

有错误:

消息 9402,级别 16,状态 1,第 1 行 XML 解析:第 1 行,字符 38, 无法切换编码

另一方面,这将按预期工作:

SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UCS-2"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));

下面的代码将生成您为示例数据寻找的完整的、包含声明的 XML 字符串:

DECLARE @Agents TABLE
(
    AgentID int,
    AgentName nvarchar(50),
    AgentLocation nvarchar(100)
);
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (1, N'Mike', N'Sanfrancisco');
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (2, N'John', N'NY');

WITH BaseData AS
(
    SELECT
        (
            SELECT
                AgentID AS '@id',
                AgentName AS 'Name',
                AgentLocation AS 'Location'
            FROM    @Agents
            FOR     XML PATH('Agent'), ROOT('Agents'), TYPE
        ) AS AgentXML
), FullStringTable AS
(
    SELECT
        *,
        '<?xml version="1.0" encoding="UCS-2"?>' +
        CONVERT(nvarchar(max),AgentXML) AS FullString
    FROM        BaseData
)
SELECT
    AgentXML AS OriginalXML,
    FullString,
    CONVERT(xml,FullString) AS FullStringConvertedToXML
FROM        FullStringTable;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将编码信息添加到 FOR XML 的结果中[重复] 的相关文章

  • 我怎样才能知道oracle 9i中哪些值是数字

    我有这个包含 varchar 的数据库 我想知道哪些记录保存数值 我试过REGEXP COUNT和其他 但我在 9i 上运行 我认为这是针对 10g gt 我怎样才能实现这个目标 I tried select to number my co
  • 给定“java.sql.SQLIntegrityConstraintViolationException”是否可以确定错误的列

    鉴于我有一个类型为 java sql SQLIntegrityConstraintViolationException 的异常 是否可以以编程方式确定错误的列 或多列 我问这个问题是因为我想将错误映射回客户端的数据模型以指示错误的字段 例如
  • PL/pgSQL SELECT 到数组中

    这是我的函数声明和主体的一部分 CREATE OR REPLACE FUNCTION access update RETURNS void AS DECLARE team ids bigint BEGIN SELECT INTO team
  • 插入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

    当我尝试插入分区表时 出现以下错误 SemanticException 错误 10044 第 1 23 行无法插入目标表 因为列号 类型不同 表 insclause 0 有 6 列 这 3 列已分区 我们不需要任何必须从中转储 存储的过滤器
  • Sql Server 2008 NVARCHAR 长度-1

    如果长度为 1 这意味着什么 这是我的 tbl 结构 Name nvarchar no 1 正如 JNK 在评论中指出的那样 这意味着MAX Name NVARCHAR MAX 来自MSDN http msdn microsoft com
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 可以使用表通配符创建 sql 查询吗?

    这可能是一个简单的问题 但我无法在网上找到解决方案 任何帮助将不胜感激 我正在尝试在 PHP 中创建一个 SQL 查询 并希望以某种方式将通配符应用于 TABLE 过滤器 可能是这样的 select from table 但是 到目前为止我
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 为什么使用 SQL Server 2008 地理数据类型?

    我正在重新设计客户数据库 我想要与标准地址字段 街道 城市等 一起存储的新信息之一是地址的地理位置 我想到的唯一用例是 当无法找到地址时 允许用户在 Google 地图上绘制坐标 这种情况通常发生在该地区是新开发的或位于偏远 农村地区时 我
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • SELECT max(x) 返回 null;我怎样才能让它返回0?

    运行以下命令时如何返回 0 而不是 null SELECT MAX X AS MaxX FROM tbl WHERE XID 1 假设没有XID 1的行 or SELECT coalesce MAX X 0 AS MaxX FROM tbl
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • 我可以从 SQL Server 读取元数据来了解最后更改的行/表吗?

    我们有一个数据库hundreds的桌子 有没有某种metaSQL Server 中的数据源 我可以以编程方式查询以获取名称最后更改表和行 或者我们是否需要实施这个我们自己每个表中的字段称为上次更改日期时间 etc 就查明表最后一次修改的时间

随机推荐

  • 不推荐从字符串文字到 char* 的转换[重复]

    这个问题在这里已经有答案了 我在代码中不断收到错误 从字符串文字到 char 的转换已被弃用 代码的目的是使用指针到指针为string1和string2分配一个单词 然后打印出来 我怎样才能解决这个问题 这是我的代码 include
  • 代码在迭代 86 时崩溃

    static void Job47 Args args str path stx TreeNodeIterator iter TreeNode treeNode treeNodeToRelease Map dictMenuDisplay F
  • 循环用户输入,直到用户输入有效的输入

    我学到了一点生锈的知识 通常在我的代码中我喜欢实现一个循环用户输入直到正确的函数 但在这种情况下它不起作用 我不知道为什么 我尝试过一种名为is ok 但这总是返回 false 代码如下 use std io macro rules inp
  • 没有开发者帐户 oAuth 的发布者 API

    我有些疑惑 我就这样坚持了一个星期 我正在开发一个应用程序来获取游戏商店的所有评论 它适用于在 Play 商店拥有帐户的所有最终用户 https developers google com android publisher getting
  • Visual Studio 2019 C++ - 概念标识符未定义

    我尝试在我的 cpp 项目中使用概念 该项目是使用 Visual Studio 2019 版本 16 4 1 编写的 但我收到错误消息 标识符 conecpt 未定义 据我所知 自版本 16 3 以来 Visual Studio 2019
  • Doctrine Regular 与 Fetch 连接

    从理论上讲 常规连接和获取连接有什么区别 我不明白仅仅通过阅读docs regular query em gt createQuery SELECT u FROM User u JOIN u address a WHERE a city B
  • 如何在 Angular 4 中使用多个 Http 请求

    我正在使用 Angular 4 和一个 API 制作一个简单的应用程序 该应用程序有几个页面可以满足他们的请求 例如 我使用此 url 获取前 10 个字符 http swapi co api people 为了获得接下来的 10 个人 我
  • 在使用独立应用程序之前,是否必须在系统上安装 .net core?

    我正在使用 Visual Studio 2019 发布一个独立的 net core 2 1 应用程序 发布期间会发出许多文件 应用程序文件以及核心库 但发布的文件中不包含 dotnet exe 如果没有 dotnet exe 我无法启动已发
  • Chart.js 在条形图和折线图上具有双轴

    我正在使用本主题中的 Quince 的 Chart js 版本Chart js如何获得组合条形图和折线图 条形图和折线图看起来非常漂亮 无论如何 轴必须分为 Y1 和 Y2 我找不到 Quince 的版本支持 我又搜索了一下 发现了这个主题
  • 将列转换为 2D 向量的 C++ 文本文件

    我有一个包含值的文本文件 我想将它们放入二维向量中 我可以用数组来做到这一点 但我不知道如何用向量来做到这一点 矢量大小应该像我事先不知道的 vector2D nColumns nLines 我最多可以在文本文件中包含列数 但不能包含行数
  • Jetpack Compose Text 超链接文本的某些部分

    如何将超链接添加到文本组件文本的某些部分 With buildAnnotatedString我可以设置link蓝色部分并带有下划线 如下图所示 但我怎样才能将该部分变成链接 val annotatedLinkString buildAnno
  • Android EditText 值转为整数

    我正在创建一个抵押计算器 Android 程序 我试图弄清楚如何获取 EditText 值 作为可编辑返回 以转换为整数 以便我可以在抵押计算中使用这些整数 我知道有一个 toString 方法 这是一种可行的方法 然后尝试将其从字符串转换
  • 如何重新定位MKMapView的指南针?

    我想移动 MKMapView 指南针 我想通过这样的方式获得它的参考 let compassView mapView subviews filter 0 is NSClassFromString MKCompassView 然而编译器抱怨
  • ASP.NET Web API 2:如何使用外部身份验证服务登录?

    根据这篇文章http www asp net web api overview security external authentication services 我可以使用local身份验证服务 使用新的 ASP NET 身份框架 但我找
  • 访问 Web 服务的客户端的传入 IP 地址

    我有一个 Web 服务 WCF 并在 IIS 中配置它 现在 有什么方法可以查看尝试访问 Web 服务的客户端 IP 地址 传入 吗 Thanks 请参阅 Keyvan Nayyeri 关于该主题的精彩博客文章 在 WCF 3 5 中检测客
  • 用于选择和取消选择电子表格中所有其他复选框的复选框

    我有一个电子表格 其中包含每个行项目的复选框 我想在顶部放置一个复选框 当选择 取消选择电子表格时 该复选框将选择和取消选择电子表格中的所有其他复选框 以下是我到目前为止的代码 如果选择了 复选框 1 它将选择所有复选框 但如果取消选择 则
  • 如何使用 Roxygen 正确记录来自不同包的泛型的 S3 方法?

    我正在编写一个包 定义一个新类 测量员和print方法 即print surveyor 我的代码工作正常 我使用 roxygen 进行内联文档 但R CMD check发出警告 函数 方法的用途 文档对象 print surveyor 但不
  • 使用数据注释指定日期时间的格式?

    我的视图模型中有这个属性 DataType DataType DateTime public DateTime StartDate get set 如果我想显示日期 或用日期填充文本框 我有这些 每当显示日期时 都会显示如下 01 01 2
  • 为什么 psycopg2 INSERT 需要这么长时间才能循环运行以及如何加快速度?

    我正在尝试在 for 循环中使用 psycopg2 INSERT 将 source lat source long destination lat destination long 行从 Pandas 数据帧插入到 PostgreSQL 表
  • 将编码信息添加到 FOR XML 的结果中[重复]

    这个问题在这里已经有答案了 我有一个脚本 它在 SQL 2008 中使用 FOR XML 返回 XML 有没有办法在输出的开头添加版本和编码信息 最终 我计划将输出保存在文件中 例如 现在我的输出看起来像这样