2009-08-27 14 views
0

J'ai un hashset que je veux sérialiser vers une table SQL Server. Lorsque HashSet sérialisé ressemble à ceci ...Sérialisation du contenu de Hashset dans une table SQL

<InstallerContactIds> 
    <int>153771</int> 
    <int>209572</int> 
</InstallerContactIds> 

J'utilise ce qui suit pour insérer le code XML dans la table ...

INSERT INTO dbo.cv_AssessorActionPlanInstallers 
SELECT @AssessorActionPlanId, InstallerId 
From OPENXML (@XmlDocumentHandle, 'AssessorActionPlan/InstallerContactIds', 2) 
With 
(
    InstallerId int 'int'   
) 

Cependant, je ne reçois que le premier id inséré dans la table . Est-il possible d'insérer tous les identifiants dans ce cas?

J'utilise SQL Server 2005

Répondre

0

Vous n'avez pas spécifié quelle version de SQL que vous utilisez, mais si vous êtes en 2005 ou plus récent, vous pouvez utiliser la nouvelle XML data type.

declare @xml xml 
select @xml = ' 
<InstallerContactIds> 
    <int>153771</int> 
    <int>209572</int> 
</InstallerContactIds>' 

select 
    x.i.value('.', 'int') 
from 
    @xml.nodes('/InstallerContactIds/int') as x(i) 

Si vous êtes coincé à l'aide OpenXML, il devrait fonctionner si vous faites ceci:

INSERT INTO dbo.cv_AssessorActionPlanInstallers 
SELECT @AssessorActionPlanId, InstallerId 
From OPENXML (@XmlDocumentHandle, 'AssessorActionPlan/InstallerContactIds/int', 2) 
With 
(
    InstallerId int '.' 
) 
+0

Salut Adam, merci pour la réponse. La méthode OPENXML concatène les identifiants ensemble et tente de les insérer (mais échoue en raison d'un débordement int). Je vais examiner le type de données XML que j'utilise 2005 – Col

+0

Col, si vos nombres débordent int, vous pouvez essayer d'utiliser le type de données bigint. J'ai exécuté la requête en utilisant l'exemple XML que vous avez posté (en modifiant l'instruction OPENXML pour supprimer le 'AssessorActionPlan' puisque ce n'était pas dans votre exemple XML) et il a retourné les deux nombres correctement. –