【问题标题】:Save Html data in XML to sql using stored procedure使用存储过程将 XML 中的 Html 数据保存到 sql
【发布时间】:2016-06-03 21:14:37
【问题描述】:

这是我从前端传递到存储过程的表的 Xml 数据。

<ArrayOfUserData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <UserData>
             <Name>Dovyan<Name />
             <id>434556464<id />
     </UserData>
     <UserData>
             <Name>Alex<Name />
             <id>12345767<id />
    </UserData>
</ArrayOfUserData>

这是我作为@in_params 传递给存储过程的上述xml。这是存储过程。

USE [DATABASE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [DATABASE].[sp_SaveUsertable]

(
   @in_params AS XML
)
AS

BEGIN
select
     T.x.value('./Name[1]','varchar(6)') as [Name] ,
     T.x.value('./id[1]','varchar(75)') as [id] 

into #Temp
from @in_params.nodes('/ArrayOfUserData/UserData') as T(x);


BEGIN TRANSACTION

INSERT INTO [dbo].[usertable](Name,id)
SELECT Name,id FROM #Temp AS T

COMMIT TRANSACTION
drop table #Temp;

END

有人可以告诉我我可能做错了什么。数据未保存在数据库表中。

【问题讨论】:

    标签: mysql sql sql-server stored-procedures insert


    【解决方案1】:

    您的查询是正确的,但您的 XML 数据格式不正确,NameID 的结束标签是自结束标签,即使您之间有开始标签和数据。它们需要是正确的结束标签,而不是自结束标签。见下文:

    <ArrayOfUserData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <UserData>
                 <Name>Dovyan<Name />  --<-- This closing tag should be </Name>
                 <id>434556464<id />   --<-- This closing tag should be </id>
         </UserData>
         <UserData>
                 <Name>Alex<Name />    --<-- This closing tag should be </Name> 
                 <id>12345767<id />    --<-- This closing tag should be </Name>
        </UserData>
    </ArrayOfUserData>
    

    如果您修复了 XML,您的存储过程应该可以工作。但是我要在您的程序中更改的一件事是使用 Temp 表,它不是必需的,只需从您的 xml 参数插入到表中即可。有点像....

    BEGIN TRANSACTION
    
        INSERT INTO [dbo].[usertable](Name,id)
        select
              T.x.value('./Name[1]','varchar(6)') as [Name] 
             ,T.x.value('./id[1]','varchar(75)') as [id] 
        from @Xml.nodes('/ArrayOfUserData/UserData') as T(x);
    
    COMMIT TRANSACTION
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多