You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server存储过程如何获取传入XML数据并插入临时表?

解决SQL Server存储过程中提取XML值插入临时表的问题

嘿,我来帮你搞定这个XML解析的问题!你现在的核心问题是没正确用SQL Server的XQuery语法来提取XML里的ID值对吧?看你给出的代码片段,应该是INSERT语句的部分没写对,我给你整理了完整的可运行存储过程,还有详细解释:

完整修正后的存储过程

CREATE PROCEDURE PROC_InsertTaskRequest_dummy
    @ProofReaders XML
AS
/* 
@ProofReaders 示例格式: 
<PR>
    <ID>6</ID>
    <ID>7</ID>
</PR>
*/
BEGIN
    SET NOCOUNT ON; -- 避免返回额外的行数统计消息,建议加上

    DECLARE @PRTable TABLE(Id int)

    -- 核心:用XQuery解析XML并插入临时表
    INSERT INTO @PRTable(Id)
    SELECT 
        PRNodes.value('.', 'int') AS Id
    FROM 
        @ProofReaders.nodes('/PR/ID') AS T(PRNodes)

    -- 可选:验证临时表数据,你可以根据业务需求替换成其他逻辑
    SELECT * FROM @PRTable
END
GO

关键知识点解释

  • .nodes('/PR/ID'):这个方法会把XML中所有匹配/PR/ID路径的节点转换成行集,简单说就是把每个<ID>节点变成一行,这样我们就能逐行提取值。这里的T(PRNodes)是给这个行集起的别名(表别名T,列别名PRNodes)。
  • .value('.', 'int'):. 代表当前节点的文本内容,'int'指定了要转换的数据类型,确保提取出来的值是整数,和临时表的Id列类型匹配,避免类型错误。
  • SET NOCOUNT ON;:这是个实用的小技巧,加上它之后存储过程不会返回“影响了X行”的额外消息,不管是在SSMS里调试还是应用程序调用都更友好。

调用示例

你可以用下面的语句测试这个存储过程:

EXEC PROC_InsertTaskRequest_dummy '<PR><ID>6</ID><ID>7</ID></PR>'

执行后会返回临时表里的两条数据(6和7),说明XML解析和插入成功了。

内容的提问来源于stack exchange,提问作者Shubashree Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:28:05