我将一个 XML 文档作为参数传递到我的存储过程。然后我试图填充游标以循环遍历 XML 的元素。我的问题是如何选择此 XML 文档的每个元素并用它们填充我的光标?
XML 文档
<Authors>
<Author_id>1</Author_id>
<Author_id>2</Author_id>
</Authors>
存储过程
CREATE PROCEDURE Insert_Publication
@authors xml
AS
DECLARE @id int
DECLARE authors_cursor CURSOR FOR
SELECT @authors.query('(/Authors/Author_id)')
open authors_cursor
FETCH NEXT FROM authors_cursor INTO @id
最佳答案
DECLARE @authors XML =
'<Authors>
<Author_id>1</Author_id>
<Author_id>2</Author_id>
</Authors>';
DECLARE @id INT;
DECLARE authors_cursor CURSOR FOR
SELECT n.c.value('.', 'INT') AS author_id
FROM @authors.nodes('/Authors/Author_id') AS n(c);
OPEN authors_cursor;
FETCH NEXT FROM authors_cursor INTO @id;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @id; -- do whatever you need with @id
FETCH NEXT FROM authors_cursor INTO @id;
END
CLOSE authors_cursor;
DEALLOCATE authors_cursor;
工作原理:
DECLARE authors_cursor CURSOR FOR
SELECT n.c.value('.', 'INT') AS author_id
FROM @authors.nodes('/Authors/Author_id') AS n(c);
@authors.nodes('/Authors/Author_id')
获取基于XQuery
的节点和派生表的别名n
和c
- 用于列使用
n.c.value('.', 'INT') AS author_id
获取元素的实际值
关于sql - 如何在 SQL Server 的存储过程中从 xml 节点创建游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565965/