SQL Server Management Studio を使用して XML ファイルをテーブルに読み込むのは初めてです。おそらくもっと良い方法がありますが、このアプローチを使用したいと思います。
現在、人に関する記録の標準 XML ファイルを読み込んでいます。タグは、データの<record>
各行の最上位レベルです。すべてのレコードを別々の行に読み取り、SQL テーブルに入れたいと考えています。
私はこれまでのところ、次のアプローチを使用してうまくやっています。
SELECT
-- Record
category, editor, entered, subcategory, uid, updated,
-- Person
first_name, last_name, ssn, ei, title, POSITION,
FROM OPENXML(@hDoc, 'records/record/person/names')
WITH
(
-- Record
category [varchar](100) '../../@category',
editor [varchar](100) '../../@editor',
entered Datetime '../../@entered',
subcategory [varchar](100) '../../@subcategory',
uid BIGINT '../../@uid',
updated [varchar](100) '../../@updated',
-- Person
first_name [varchar](100) 'first_name',
last_name [varchar](100) 'last_name',
ssn [varchar](100) '../@ssn',
ei [varchar](100) '../@e-i',
title [varchar](100) '../title',
Position [varchar](100) '../position',
)
ただし、タグ名はすべて各レコード/個人に固有であるため、このアプローチはうまく機能しました。私が抱えている問題は、複数のタグのリストを含むタグを<Person>
持っているタグ内にあります。上記のアプローチを使用して'../aliases'を参照すると、すべての Alias 要素が 1 つの長い文字列行として混在して取得されます。「../aliases/alias」のみを試すと、レコード行ごとに最初の要素が返されます。Aliases タグ セット内に 10 個の Alias 要素があった場合、たとえば 10 行が返されます。<Aliases>
<Alias> test name </Alias>
上位レベルのタグ内に同じ名前のタグが複数ある場合に、1 行だけでなくすべてを返すように指定する方法はありますか?
以下は、私が参照している XML 内のブロックの例です。
- <aliases>
<alias>test 1</alias>
<alias>test 2</alias>
<alias>test 3</alias>
</aliases>
SQL テーブルに次のものが必要です。
Record Aliases
Record 1 test 1
Record 1 test 2
Record 1 test 3
Record 2 test 4
Record 2 test 5
しかし、私が得るのは次のとおりです。
Record 1 test 1
Record 2 test 4
これを正しく説明していない場合はお詫び申し上げます - どんな助けでも大歓迎です。