dポイントプレゼントキャンペーン実施中!

「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/a …
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>
'

どなたか分かる方がいらっしゃいましたら、
アドバイスをお願いいたします。

A 回答 (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

以上、ご参考になれば幸いです。

この回答への補足

ご回答ありがとうございます。

いろいろやってみたところ
宣言部の targetNamespace を削除し、 choice を sequence に代えたところエラーがなくなりました。

お手数をおかけして申し訳ありません。

補足日時:2008/06/10 18:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!