ここではデータ型に推測し、またあなたがa1
変換することを意味するものではありませんでしたことを推測 - >A1
など
DECLARE @x TABLE(XMLFIELD XML);
INSERT @x SELECT '<word A="a1" B="b1" C="c1" />'
UNION ALL SELECT '<word A="a2" B="b2" C="c2" />'
UNION ALL SELECT '<word A="a3" B="b2" C="c3" />';
-- INSERT INTO dbo.OtherTable
SELECT
A = x.a.value('@A', 'varchar(32)'),
B = x.a.value('@B', 'varchar(32)'),
C = x.a.value('@C', 'varchar(32)')
FROM @x AS src
CROSS APPLY src.XMLFIELD.nodes('word') AS x(a);
結果:
A B C
------- ------- -------
a1 b1 c1
a2 b2 c2
a3 b2 c3
EDITを
あなたは完全に質問を変えてしまったので、私の答えは狂ったように見え、まったく無関係に見えるあなたの質問、もう一度お試しください。もう一度私はここでいくつかの推測をしています。なぜなら、あなたは自分のロジックや要件をうまく記述していないからです。 B列は、新しい値が表示されるたびに増加しますか? C列と同じですか? が連続した行にでない重複がある可能性はありますか?
DECLARE @x TABLE(XMLFIELD XML);
INSERT @x SELECT '<word A="al" B="h" C="Ps" />'
UNION ALL SELECT '<word A="has" B="es" C="Pf" />'
UNION ALL SELECT '<word A="mom" B="es" C="Ph" />';
;WITH y AS
(
SELECT
word = x.a.value('@A', 'varchar(32)'),
n = ROW_NUMBER() OVER (ORDER BY x.a.value('@A', 'varchar(32)')),
B = x.a.value('@B', 'varchar(32)'),
C = x.a.value('@C', 'varchar(32)')
FROM @x AS src
CROSS APPLY src.XMLFIELD.nodes('word') AS x(a)
)
SELECT word,
A = 'A' + RTRIM(n),
B = 'B' + RTRIM((SELECT COUNT(*)+1 FROM y AS y2 WHERE n < y.n AND B <> y.B)),
C = 'C' + RTRIM((SELECT COUNT(*)+1 FROM y AS y2 WHERE n < y.n AND C <> y.C))
FROM y
ORDER BY word;
結果:あなたは実際に、あなたが努力の束である前に、よくあなたの問題を説明する(そして右の初めてそれを得る上で動作するはずですあなたの問題を解決するコヒーレント答えをしたい場合は
word A B C
------ ---- ---- ----
al A1 B1 C1
has A2 B2 C2
mom A3 B2 C3
間違った問題の解決に費やした)。
あなたの期待した結果があなたの入力と一致していないようです。 XMLの値をどのように解釈するかについて少し説明できますか? –
@Mikael彼は質問と望みの結果を完全に変えました。私の出力が彼の後ろのものともはや一致しないので、私はすでに1度投票されました。 :-( –
@AaronBertrand - あなたは[この1つ]を持っています(http://stackoverflow.com/questions/10293391/how-to-update-a-xml-field-table-in-sql#comment13245007_10293391) *何も起こっていないことを説明するのに役立ちません。しかし私は最も[投票された回答](http://stackoverflow.com/a/10294146/569436):)のようになります。 –