Как получить индивидуальную идентификацию в XML-вставке? - PullRequest
0 голосов
/ 02 октября 2009

Я мало работал с XML в SQL, поэтому постараюсь задать вопрос как можно лучше.

Скажем, я получил некоторый структурированный XML в SQL для вставки.

Структура может быть:

<Team>
   <Player>
     <Name>Player1</Name>
     <Games>
       <Game>
         <Date>9/7/2009</Date>
         <MinutesPlayed>90</MinutesPlayed>
       </Game>
     </Games>
   </Player>
   <Player>
     <Name>Player2</Name>
     <Games>
       <Game>
         <Date>9/7/2008</Date>
         <MinutesPlayed>87</MinutesPlayed>
       </Game>
     </Games>
   </Player>
</Team>

Я могу вставить запись -Team- и получить удостоверение личности, поскольку в этом случае у меня есть только 1 запись, и доступ к SCOPE_IDENTITY () будет соответствовать удостоверению для этой записи, и это удостоверение я буду использовать для вставки проигрывателя. узлы.

В игровой таблице у меня есть поле PlayerID. Как я могу получить удостоверение личности каждого вставленного игрока, а затем использовать это удостоверение личности для вставки записей об игре?

Поскольку выполнение SELECT, например SELECT FROM @ ReceivedXML.nodes ('Player'), вернет несколько значений, и все узлы Player будут вставлены в пакет.

Может кто-нибудь указать мне какие-либо руководства о том, как это сделать, или, может быть, поделиться, как вы решили эту проблему? Спасибо, очень признателен.


Редактировать - возможно, я не объяснил себя правильно.

У команды есть поле TeamID. Игроки имеют поле PlayerID, а также поле TeamID. Игры имеют поле GameID и PlayerID.

Из XML, как бы я вставил команду, получив новый идентификатор TeamID, затем вставил Player one в таблицу PLayers, получив вновь созданный идентификатор PlayerID, а затем вставил запись игры, используя ранее полученный PLayerID.

После того, как я закончу с Player1, я сделаю то же самое для Player2. Вставить запись игрока, получить идентификатор PlayerID <вставить игру и т.д. </p>

1 Ответ

1 голос
/ 02 октября 2009

Загрузить таблицу игроков, как показано ниже.

Затем объедините проанализированный XML с таблицей Player по имени, чтобы получить идентификаторы для следующей вставки в игру и т. Д.

DECLARE @foo XML

SELECT @foo = N'
<Team>
   <Player>
     <Name>Player1</Name>
     <Games>
       <Game>
         <Date>9/7/2009</Date>
         <MinutesPlayed>90</MinutesPlayed>
       </Game>
     </Games>
   </Player>
   <Player>
     <Name>Player2</Name>
     <Games>
       <Game>
         <Date>9/7/2008</Date>
         <MinutesPlayed>87</MinutesPlayed>
       </Game>
     </Games>
   </Player>
</Team>
'


INSERT Players
    (PlayerName)
SELECT
    CAST(y.item.query('data(Name)') AS varchar(30))
FROM
    @foo.nodes('/Team') x(item)
    CROSS APPLY
    x.item.nodes('./Player') AS y(item)


INSERT Game
    (PlayerID, Date, MinutesPlayed)
SELECT
    P.PlayerID,
    CAST(z.item.query('data(Date)') AS varchar(30)),
    CAST(z.item.query('data(MinutesPlayed)') AS varchar(30))
FROM
    @foo.nodes('/Team') x(item)
    CROSS APPLY
    x.item.nodes('./Player') AS y(item)
    CROSS APPLY
    y.item.nodes('./Games/Game') AS z(item)
    JOIN
    Players P ON CAST(y.item.query('data(Name)') AS varchar(30)) = P.PlayerName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...