まず:XMLは厳密に大文字と小文字が区別されます!あなたのXMLは有効でもありません...先頭の<Product>
は別の要素名で、その後は</product>
です。あなたはすべての場所で小文字を使用しているように、私はこのように変更しました。
独自のクエリは近いですが、大文字で間違っていて、.value()
関数を正しく使用していません(パラメータが不足しています)。
このお試しください:
DECLARE @mockup TABLE(ID INT IDENTITY,Descr VARCHAR(100),Data XML);
INSERT INTO @mockup VALUES
('Your Sample','<product>
<field name="IsCustomer" type="System.Boolean, mscorlib">
<boolean>false</boolean>
</field>
</product>')
,('Your sample plus another field','<product>
<field name="IsCustomer" type="System.Boolean, mscorlib">
<boolean>true</boolean>
</field>
<field name="SomeOther" type="System.Boolean, mscorlib">
<boolean>true</boolean>
</field>
</product>')
,('No "IsCustomer" at all','<product>
<field name="SomeOther" type="System.Boolean, mscorlib">
<boolean>true</boolean>
</field>
</product>')
,('Two of them','<product>
<field name="IsCustomer" type="System.Boolean, mscorlib">
<boolean>true</boolean>
</field>
<field name="IsCustomer" type="System.Boolean, mscorlib">
<boolean>false</boolean>
</field>
</product>');
SELECT * FROM @mockup;
--Your様々なバリエーションを返すクエリを、そのうちの一つがあなたのために大丈夫でなければなりません。申し訳ありません
SELECT m.ID
,m.Descr
,fld.value('(boolean/text())[1]','bit')
FROM @mockup AS m
OUTER APPLY m.Data.nodes('/product/field[@name="IsCustomer"]') AS A(fld);
。それは私の間違いでした。そのSQLサーバー。 –
サンプルXMLを入力とした場合の期待される出力は?ちょうど '偽'? – har07
すべてのフィールド値を別々の列として取得したい。真値と偽値の組み合わせなど。 –