3

このT-SQLコードが値「1」の行を1つだけ返す理由を誰かが説明できますか?私は2つの行(「1」と「2」)を取得することを期待していました。ここで何かが足りませんか?

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'

DECLARE @handle2 INT

EXEC sp_xml_preparedocument @handle2 OUTPUT, @XMLDoc2

SELECT * FROM OPENXML (@handle2, '/ids', 2) WITH (id INT 'id') 

EXEC sp_xml_removedocument @handle2

:SQLServer2008を使用しています

どうもありがとう!

4

5 に答える 5

11

同じ問題があり、別のサイトで答えを見つけました。'/ids'の代わりに'/ids / id'を使用してから、'。'を使用する必要があります。WITH句で。

DECLARE @XMLDoc2 XML 
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>' 

DECLARE @handle2 INT 

EXEC sp_xml_preparedocument @handle2 OUTPUT, @XMLDoc2 

SELECT * FROM OPENXML (@handle2, '/ids/id', 2) WITH (id INT '.')  

EXEC sp_xml_removedocument @handle2 
于 2010-10-06T15:51:37.270 に答える
9

SQL Server 2005以降のXML変数で新しい.nodes()メソッドを使用してみませんか?

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'


SELECT
   ids.id.value('.', 'int') 'id'
FROM 
   @xmldoc2.nodes('/ids/id') ids(id)

これにより、期待どおりに「1」と「2」の値が得られます。

于 2009-12-10T22:10:52.917 に答える
7

openxmlの意味を忘れて、遅く、面倒で、使用できず、いたるところに悪いです。XMLメソッドを使用します。これらのメソッドは、高速で直感的で、ユーザーフレンドリーで、優れた機能を備えています。

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'

select x.value(N'.', N'int') as id
from @XMLDoc2.nodes(N'/ids/id') t(x);
于 2009-12-10T22:10:04.817 に答える
2
DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'
DECLARE @handle2 INT
EXEC sp_xml_preparedocument @handle2 OUTPUT, @XMLDoc2
SELECT * FROM OPENXML (@handle2, '/ids/id', 2) WITH (id INT '.') 
EXEC sp_xml_removedocument @handle2
于 2011-08-06T07:23:13.640 に答える
0

xpathはidsであるため、idはidsの属性ですが、そうではないため、..を使用してツリーを上に移動し、ノードを指定してxpathを指定する必要があります。ノードはによって指定され../id、属性はによって指定されます../@whatever

SELECT * FROM OPENXML (@handle2, '/ids', 2) WITH (id INT '../id') 
于 2010-08-26T18:18:55.677 に答える