1

金曜日の午後、これは素晴らしいアイデアのように思えましたが、少し問題があります。私は以前に SQL XML クエリを使用したことがないので、信じられないほど愚かなことをしただけかもしれません。基本的に、一連の文字列を渡して、テーブルをストアド プロシージャにクエリしたいと考えています。

これについて少し考え、CSV を使用することを検討した後、XML を使用してこれを行うことにしました。したがって、私の XML は次のようになります。

<Root>
  <string>value</string>
  <string>value</string>
  <string>value</string>
  <string>value</string>
</Root>

これを XML 値型としてストアド プロシージャに渡します。

CREATE PROCEDURE usp_UpdateHotelImages
    -- Add the parameters for the stored procedure here
    @hotelID int, 
    @imageIDs xml
AS
BEGIN

そのため、 XMLを文字列のテーブルに分割したいと考えています。

私のSQLは次のようになります。

SELECT Child.value('(string)[1]', 'varchar(200)')
FROM @imageIDs.nodes('/Root/') AS N(Child))

しかし、エラーメッセージが表示され続けますXQuery [nodes()]: Syntax error near '<eof>', expected a "node test".

私はここで信じられないほど愚かなことをしているかもしれないので、どんな助けも感謝して受け取ります.

アップデート

役立つように、それを単一のクエリに分割しました。

DECLARE @imageIDs xml
SET @imageIDs = '<Root>
  <string>value</string>
  <string>value</string>
  <string>value</string>
  <string>value</string>
</Root>'

SELECT Child.value('(string)[1]', 'varchar(200)')
        FROM @imageIDs.nodes('/Root/') AS N(Child)
4

2 に答える 2

2

/問題はノード関数の最後です。

SELECT Child.value('(string)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root') AS N(Child)

または代わりに

SELECT Child.value('(.)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root/*') AS N(Child)

あなたが達成しようとしているものに応じて。

于 2012-10-01T08:41:09.397 に答える
1

/エラーは、ノード式の末尾が原因です。それはちょうどあるはず/Rootです。

SELECTところで、私はあなたが次によって達成されるテーブルとして値を返すことを探していると思います:

DECLARE @imageIDs XML

SELECT @imageIDs = '
<Root>
  <string>value</string>
  <string>value2</string>
  <string>value3</string>
  <string>value4</string>
</Root>'

SELECT 
    Child.value('(.)[1]', 'varchar(200)')
FROM @imageIDs.nodes('/Root/string') AS N(Child)

結果:

value
value2
value3
value4

(4 row(s) affected)
于 2012-10-01T08:42:51.487 に答える