Sql server 动态XML到存储过程插入
我有如下类似的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
<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吗?谢谢你的帮助:)