DECLARE @XML XML
DECLARE @TROLES TABLE (RoleID INT,UserID INT)SET @XML = '<roles><role  id="3"><user id="31" /><user id="32" /></role><role id="4"><user id="41" /></role></roles>'Insert @TROLES......请教,在SQL如何把上面的@XML相应的数据插到表@TRoles ????

解决方案 »

  1.   

    --下面为多种方法从XML中读取EMAIL  DECLARE @x XMLSELECT @x = '<People>    <dongsheng>        <Info Name="Email">[email protected]</Info>         <Info Name="Phone">678945546</Info>         <Info Name="qq">36575</Info>     </dongsheng></People>' -- 方法1SELECT @x.value('data(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)') -- 方法2SELECT @x.value('(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)') -- 方法3SELECT     C.value('.','varchar(30)')FROM @x.nodes('/People/dongsheng/Info[@Name="Email"]') T(C) -- 方法4SELECT     C.value('(Info[@Name="Email"])[1]','varchar(30)')FROM @x.nodes('/People/dongsheng') T(C) -- 方法5SELECT     C.value('(dongsheng/Info[@Name="Email"])[1]','varchar(30)')FROM @x.nodes('/People') T(C) -- 方法6SELECT     C.value('.','varchar(30)')FROM @x.nodes('/People/dongsheng/Info') T(C)WHERE C.value('(.[@Name="Email"])[1]','varchar(30)') IS NOT NULL -- 方法7SELECT     C.value('.','varchar(30)')FROM @x.nodes('/People/dongsheng/Info') T(C)WHERE C.exist('(.[@Name="Email"])[1]') = 1  
      

  2.   


    请指出问题,谢谢.......................
    小弟捣鼓了一下...似乎可以满足需求了
    -----------------------------------------------------------------------------------
    DECLARE @XML XML
    DECLARE @TROLES TABLE ( RoleID INT, UserID INT )
    SET @XML = '<roles><role  roleid="3"><user id="31" /><user id="32" /></role><role roleid="4"><user id="41" /></role></roles>'
     
    INSERT  @TROLES
            ( RoleID ,
              UserID 
            )
            SELECT  Roles.Role.value('../@roleid', 'int') AS RoleID ,
                    Roles.Role.value('@id', 'int') AS UserID
            FROM    @XML.nodes('//role/user') Roles ( Role )
    SELECT  *
    FROM    @TROLES
    -------------------------------------------------------------------------