Je n'ai pas beaucoup travaillé avec XML en SQL, donc je vais essayer de poser la question du mieux que je peux.Comment obtenir une identité individuelle dans un insert XML?
Dites que je reçois du code XML structuré en SQL pour insertion.
La structure pourrait être:
<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>
Je suis en mesure d'insérer l'enregistrement -Team- et obtenir l'identité, puisque dans ce cas, je n'ai que 1 enregistrement et l'accès à SCOPE_IDENTITY() correspondra à l'identité pour cet enregistrement, et cette identité que je vais utiliser pour insérer les nœuds du lecteur.
Dans la table de jeu, j'ai un champ PlayerID. Comment puis-je obtenir l'identité de chaque joueur inséré, puis utiliser cette identité pour insérer les enregistrements du jeu? Depuis un SELECT comme SELECT FROM @ ReceivedXML.nodes ('Player') renverrait plusieurs valeurs, et tous les nœuds Player seraient insérés par lot.
Quelqu'un peut-il s'il vous plaît me diriger vers des guides sur la façon de le faire, ou peut-être partager comment vous avez résolu ce problème? Merci, vraiment apprécié.
Modifier - peut-être que je ne me suis pas expliqué correctement.
L'équipe a un champ TeamID. Les joueurs ont un champ PlayerID, ainsi que le champ TeamID. Les jeux ont un GameID et un champ PlayerID. A partir du XML, comment insérer l'équipe, obtenir l'ID d'équipe nouvellement identifiée, puis insérer le lecteur un dans la table PLayers, obtenir son identité PlayerID nouvellement générée, puis insérer l'enregistrement du jeu, en utilisant l'identifiant PLayerID précédemment obtenu. Une fois que j'ai terminé avec Player1, je ferais la même chose pour Player2. Insérer le dossier du joueur, obtenir l'identité PlayerID < insérer le jeu, etc
Pour ce faire, vous êtes probablement mieux loti essayer de l'accomplir en C# - comme vous disons, vous pourriez insérer un tas de joueurs, et à tour de rôle tout un tas de jeux pour chaque joueur. Ceci est mieux fait dans les boucles, et c'est un domaine où T-SQL ne brille certainement pas .. –