2013-06-20 6 views
4

J'ai xml semblable à ceci:XML dynamique de procédure stockée Insérer

<main> 
    <kim id="child1_id" name="this is child1" active="1" /> 
    <kim id="Child2 id" name="this is child2" active="1" /> 
    <lee id="child3_id" heigt="189" weight="70" /> 
</main> 

avec kim et lee est le nom des tables dans ma base de données. Maintenant je dois faire une procédure stockée pour insérer la valeur du xml ci-dessus à Kim et Lee. Je peux obtenir le nom de la table à l'aide OPENXML et je sais que je peux utiliser requête comme ceci pour l'insertion (par exemple) Valeur kim:

declare @tempChild1 table(
    id  varchar(20), 
    name varchar(50), 
    active bit 
) 

select C.value('@id', 'varchar(20)') as id, 
     C.value('@name', 'varchar(50)') as name, 
     C.value('@active', 'bit') as active, 
from @xml.nodes('/main/kim') t (C) 

insert into child1 
     select * 
     from @tempChild1 

Le problème est, il est un xml dynamique et je ne sais pas quelles sont les tables viendrait du xml, mais je dois quand même faire une requête d'insertion basée sur le xml. Est-il possible de le faire en SQL? Puis-je faire la déclaration comme ci-dessous du xml ci-dessus?

exec spx_kim @xml 
exec spx_lee @xml 

avec @xml est la valeur de chaque noeud kim et lee dans le fichier XML.

J'apprécie vraiment chaque aide que vous me donnez.

Répondre

0

Après tout, je dois faire la procédure stockée manuellement pour chaque table impliquée

1

Essayez celui -

LDD:

CREATE PROCEDURE dbo.usp_kim 
(
    @XML XML 
) 
AS BEGIN 

    SET NOCOUNT ON; 

    --INSERT INTO .... 
    SELECT 
      t.c.value('@id', 'VARCHAR(20)') 
      , t.c.value('@name', 'VARCHAR(50)') 
      , t.c.value('@active', 'BIT') 
    FROM @XML.nodes('/main/kim') t(c) 


END 
GO 

CREATE PROCEDURE dbo.usp_lee 
(
    @XML XML 
) 
AS BEGIN 

    --INSERT INTO .... 
    SELECT 
      t.c.value('@id', 'VARCHAR(20)') 
      , t.c.value('@heigt', 'INT') 
      , t.c.value('@weight', 'INT') 
    FROM @XML.nodes('/main/lee') t(c) 

END 
GO 

Requête:

DECLARE @XML XML 
SELECT @XML = ' 
<main> 
    <kim id="child1_id" name="this is child1" active="1" /> 
    <kim id="Child2 id" name="this is child2" active="1" /> 
    <lee id="child3_id" heigt="189" weight="70" /> 
</main>' 

EXEC dbo.usp_kim @XML = @XML 
EXEC dbo.usp_lee @XML = @XML 
+0

J'ai déjà essayez cela avant, mais encore une fois, je ne sais pas quelle table viendrait du xml. Disons que s'il y a plus de table qui vient de différentes tables, je devrais (nom de la table) devrais-je faire un autre sp pour ais table? Merci de votre aide :) –

Questions connexes