关于for xml子句的问题

bala7229291 2011-06-03 02:21:19

if object_id('test') is not null
drop table test
go

create table test(id int, t_name nchar(1))
go

insert into test
select 1, 'a' union all
select 2, 'b' union all
select 3, 'c' union all
select 4, 'd' union all
select 5, 'e'
go

select *
from test
for xml path('test_record'), root
go

drop table test
go


得到的结果为

<root>
<test_record>
<id>1</id>
<t_name>a</t_name>
</test_record>
<test_record>
<id>2</id>
<t_name>b</t_name>
</test_record>
<test_record>
<id>3</id>
<t_name>c</t_name>
</test_record>
<test_record>
<id>4</id>
<t_name>d</t_name>
</test_record>
<test_record>
<id>5</id>
<t_name>e</t_name>
</test_record>
</root>

但我需要在XML文本的前部加入声明


<?xml version="1.0" encoding="GBK"?>


我该如何做,是否可以加入哪个选项或者参数是的查询出来的结果中包含这个信息
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bala7229291 2011-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fallingme 的回复:]
SQL code
declare @xml xml
select @xml=(select *
from test
for xml path('test_record'), root
)
select @xml='<?xml version="1.0" encoding="GBK"?>'+cast(@xml as varchar(max))
select @xml
[/Quote]

这个语句运行是没问题,但select @xml的内容中,还是没有<?xml version="1.0" encoding="GBK"?>这个语句啊,为什么?
东那个升 2011-06-07
  • 打赏
  • 举报
回复
这貌视不是SQL能处理的
小金牛儿 2011-06-07
  • 打赏
  • 举报
回复
是不行
cosmo_sei 2011-06-04
  • 打赏
  • 举报
回复
它只生成能够放在xml的对应node,并不是整个XML文件,你得自己加上头部。
fallingme 2011-06-04
  • 打赏
  • 举报
回复
declare @xml xml
select @xml=(select *
from test
for xml path('test_record'), root
)
select @xml='<?xml version="1.0" encoding="GBK"?>'+cast(@xml as varchar(max))
select @xml
打一壶酱油 2011-06-03
  • 打赏
  • 举报
回复
不知道
bala7229291 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 english_fans 的回复:]
赋值给nvarchar变量,然后加上哈,嘿嘿~
[/Quote]
有没有其他办法,声明部分应该属于XML标准的一部分,难道就没有其他自动生成的办法?
流氓兔 2011-06-03
  • 打赏
  • 举报
回复

赋值给nvarchar变量,然后加上哈,嘿嘿~
FOR 子句 FOR 子句用于指定 BROWSE 或 XML 选项(BROWSE 和 XML 是不相关的选项)。 语法 [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ] } ] 参数 BROWSE 指定当查看 DB-Library 浏览模式游标中的数据时允许更新。如果表包含时间戳列(用 timestamp 数据类型定义的列),表有唯一索引且 FOR BROWSE 选项在 SELECT 语句的最后发送到 SQL Server,则可以在应用程序中浏览该表。有关更多信息,请参见浏览模式。 说明 在含有 FOR BROWSE 选项的 SELECT 语句中无法使用 HOLDLOCK。 FOR BROWSE 选项不能出现在用 UNION 运算符联接的 SELECT 语句中。 XML 指定查询结果将作为 XML 文档返回。必须指定下列 XML 模式之一:RAW、AUTO、EXPLICIT。有关 XML 数据和 SQL Server 的更多信息,请参见使用 FOR XML 检索 XML 文档。 RAW 获得查询结果并将结果集内的各行转换为 XML 元素,用一般标识符 作为元素标记。有关更多信息,请参见使用 RAW 模式。 AUTO 以简单的嵌套 XML 树返回查询结果。在 FROM 子句内,每个在 SELECT 子句中至少有一列被列出的表都表示为一个 XML 元素。SELECT 子句中列出的列映射到适当的元素特性。有关更多信息,请参见使用 AUTO 模式。 EXPLICIT 指定显式定义所得到的 XML 树的形状。使用此种模式,要求以一种特定的方式编写查询,以便显式指定有关期望的嵌套的附加信息。有关更多信息,请参见使用 EXPLICIT 模式。 XMLDATA 返回架构,但不将根元素添加到结果中。如果指定了 XMLDATA,它将被追加到文档上。 ELEMENTS 指定列作为子元素返回。否则,列将映射到 XML 特性。 BINARY BASE64 指定查询返回二进制 base64 编码格式的二进制数据。使用 RAW 和 EXPLICIT 模式检索二进制数据时,必须指定该选项。这是 AUTO 模式中的默认值。

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧