请参阅下面的DDL:
create table #Dataset1 (id int not null identity,firstname varchar(30),surname varchar(30), primary key (id))
insert into #Dataset1 (firstname,surname) values ('Mark','Williams')
以下的SQL:
select firstname,surname
from #Dataset1
FOR XML PATH('Dataset1')
返回:
<Dataset1>
<firstname>Mark</firstname>
<surname>Williams</surname>
</Dataset1>
如何让SQL返回:
<Dataset1 URN='1'>
<firstname>Mark</firstname>
<surname>Williams</surname>
</Dataset1>
URN = 1将被编码到XML中,即不是从数据库中生成的。
答案 0 :(得分:0)
试试这个
SELECT
id AS [@URN]
,firstname
,surname
FROM #Dataset1
FOR XML PATH ('Dataset1')
<强>结果强>
<Dataset1 URN="1">
<firstname>Mark</firstname>
<surname>Williams</surname>
</Dataset1>
答案 1 :(得分:0)
我的问题并不是很清楚(特别是关于硬编码的最后一句话)......
以下是四种不同的方法:
如果将被硬编码,即不是从数据库生成意味着修复值应该是这个
SELECT 1 AS [@URN]
,firstname
,surname
FROM #Dataset1 FOR XML PATH('Dataset1');
如果要将此属性添加到现有XML,则可以执行此操作
DECLARE @xml XML=
(
SELECT firstname
,surname
FROM #Dataset1 FOR XML PATH('Dataset1'),TYPE
);
SET @xml.modify('insert attribute URN {"1"} into (/Dataset1)[1]');
SELECT @xml;
如果以后再添加,你可以在字符串级别上执行此操作(但我不建议这样做)
DECLARE @xml XML=
(
SELECT firstname
,surname
FROM #Dataset1 FOR XML PATH('Dataset1'),TYPE
);
SET @xml=
CAST
(
REPLACE
(
CAST(@xml AS NVARCHAR(MAX))
,N'<Dataset1>',N'<Dataset1 URN="1">')
AS XML);
SELECT @xml;
所有三个都将返回
<Dataset1 URN="1">
<firstname>Mark</firstname>
<surname>Williams</surname>
</Dataset1>
如果您的“URN”实际上是名称空间
WITH XMLNAMESPACES(DEFAULT 'SomeDefault'
,'SomeOther' AS URN)
SELECT firstname
,surname
FROM #Dataset1 FOR XML PATH('Dataset1')
结果就是这个
<Dataset1 xmlns:URN="SomeOther" xmlns="SomeDefault">
<firstname>Mark</firstname>
<surname>Williams</surname>
</Dataset1>