Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 动态XML到存储过程插入_Sql Server_Xml_Stored Procedures - Fatal编程技术网

Sql server 动态XML到存储过程插入

Sql server 动态XML到存储过程插入,sql-server,xml,stored-procedures,Sql Server,Xml,Stored Procedures,我有如下类似的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> 问题是,它是一个动态xml,我不知道xml

我有如下类似的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>
问题是,它是一个动态xml,我不知道xml会生成哪些表,但我仍然必须基于xml进行插入查询。有没有可能在SQL中实现这一点?我可以从上面的xml中做出如下声明吗

exec spx_kim @xml
exec spx_lee @xml
with@xml是xml中每个kim和lee节点的值

我真的很感激你给我的每一个帮助

试试这个-

DDL:

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
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
查询:

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
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
DECLARE@XML
选择@XML=
'
EXEC dbo.usp_kim@XML=@XML
EXEC dbo.usp_lee@XML=@XML

毕竟,我必须为涉及的每个表手动创建存储过程

我以前已经尝试过了,但我不知道xml会生成什么表。假设有更多的表来自不同的表,即ais(表名),我应该为ais表创建另一个sp吗?谢谢你的帮助:)