あなたがOUTERを適用し、XMLフィールドの一部を打破することができます。
value()の方法は、XQueryの式が必要です。例えば
:
DECLARE @T TABLE (Id int identity(1,1) primary key, XmlCol1 xml);
insert into @T (XmlCol1) values
('<auditElement><field id="2881159" type="5" name="Responsiveness" formatstring=""><unSetChoice>2881167</unSetChoice><setChoice>2881166</setChoice></field></auditElement>'),
('<auditElement><field id="2881160" type="6" name="Responsiveness" ><unSetChoice>2881187</unSetChoice><setChoice>2881188</setChoice></field></auditElement>');
select *
from (
select
Id,
a.field.value('@id', 'int') as xmlid,
a.field.value('(unSetChoice)[1]', 'int') as unSetChoice,
a.field.value('(setChoice)[1]', 'int') as setChoice,
a.field.value('@type', 'int') as type,
a.field.value('@name', 'varchar(max)') as name,
a.field.value('@formatstring', 'varchar(max)') as formatstring
from @T t
outer apply t.XmlCol1.nodes('/auditElement/field') as a(field)
where a.field.value('@id', 'int') > 0 and Id > 0
) q
where name = 'Responsiveness';
結果:私が与えたサンプルの複数の行を格納されているテーブルを持っていたものならば
Id xmlid unSetChoice setChoice type name formatstring
1 2881159 2881167 2881166 5 Responsiveness
2 2881160 2881187 2881188 6 Responsiveness NULL
。例:xmlデータが10行あった場合、宣言を読み込み、結果を出力するにはどうすればよいですか? – Jeff