• 締切済み

SQL ServerのXMLスキーマがうまくいきません。

「SQL Server 2005 Express」を使用しています。 次のようなスキーマをサーバーに登録して CREATE XML SCHEMA COLLECTION dbo.schema_test AS N'<?xml version="1.0" encoding="UTF-16"?> <xsd:schema targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root">  <xsd:complexType mixed="true">   <xsd:choice>    <xsd:element name="A" type="xsd:string" />    <xsd:element name="B" type="xsd:string" />    <xsd:element name="C" type="xsd:string" />   </xsd:choice>  </xsd:complexType> </xsd:element> </xsd:schema>' ; つぎのようなクエリを試したのですが、 「メッセージ 6913、レベル 16、状態 1、行 5 XML 検証: 要素 'root' の宣言が見つかりませんでした。場所: /*:root[1]」 というエラーメッセージが表示されてしまいます。 DECLARE @xml xml (dbo.schema_text) SET @xml = '<root> <A>AAA</A> <B>BBB</B> <C>ooo</C> </root> ' どなたか分かる方がいらっしゃいましたら、 アドバイスをお願いいたします。

みんなの回答

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

私もまったく同じことをやってみました。 結果ですが、スキーマ名(dbo)とXMLスキーマーコレクションの名前を [] で囲ってみてください。そうするとエラーがなくなります。 例:DECLARE @xml xml ([dbo].[schema_test]) それから、 SET @xml = '<root> <A>AAA</A> <B>BBB</B> <C>ooo</C> </root> ' とやると、rootノードがないとエラーになります。 その先、何がしたいのかまで掲載されていないので、あえてここでは 触れませんが、一応、私が検証したコードを掲載しておきますね。 -- graf_さんのXMLスキーマ DECLARE @xml xml ([dbo].[schema_test]) -- OPENXML用のハンドル DECLARE @DocHandle int -- graf_さんのスキーマからOPENXML用のハンドルを取得する EXEC sp_xml_preparedocument @DocHandle OUTPUT, @xml -- graf_さんのスキーマをSQLを使って開いてみる SELECT * FROM OPENXML (@DocHandle, '/root',1) WITH (A varchar(max), B varchar(max), C varchar(max)) -- OPENXML用のハンドルを削除 EXEC sp_xml_removedocument @DocHandle 以上、ご参考になれば幸いです。

graf_
質問者

補足

ご回答ありがとうございます。 いろいろやってみたところ 宣言部の targetNamespace を削除し、 choice を sequence に代えたところエラーがなくなりました。 お手数をおかけして申し訳ありません。

関連するQ&A