2017-01-23 59 views
1

我有SQL Server一个表,我把结果从表中设置的值转换成XML这样的:在SQL Server中的XML列临时表

select 
    lAccountID, 
    sName, 
    sAge 
from 
    AccountDVDetails 
where 
    laccountID = 10 
for xml raw ('Values'), ROOT ('Accounts'), ELEMENTS 

该查询给了我XML

<Accounts> 
<Values> 
    <lAccountID>10</lAccountID> 
    <sName>A</sName> 
    <sAge>21</sAge> 
</Values> 
<Values> 
    <lAccountID>10</lAccountID> 
    <sName>B</sName> 
    <sAge>22</sAge> 
</Values> 
<Values> 
    <lAccountID>10</lAccountID> 
    <sName>C</sName> 
    <sAge>23</sAge> 
</Values> 
</Accounts> 

现在我想这个XMLlAccountId在临时表中存储#tmpAccount

lAccountId  XMLValue 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    10   <Accounts><Values><lAccountID>10</lAccountID><sName>A</sName><sAge>21</sAge></Values><Values><lAccountID>10</lAccountID><sName>B</sName><sAge>22</sAge></Values><Values><lAccountID>10</lAccountID><sName>C</sName><sAge>23</sAge></Values></Accounts> 

我该如何做到这一点?我试图把XML变成string变量,但XML被截断到一定的限度。

任何帮助将深表谢意。谢谢。

+0

你是否需要对许多'lAccountID's一次或这总是绑定到一个ID(在这种情况下10)? – Shnugo

+0

@Shnugo是的,我一次需要许多'lAccountID'这个 –

+0

接受的答案并没有真正涵盖这个......你能够自己解决这个问题吗? – Shnugo

回答

1

试试这个嵌套的,层次化XML对于很多账户

首先我声明一些表变量实体模型测试场景。我认为,不存在与账户父表:

DECLARE @dummyAccount TABLE(lAccountID INT IDENTITY,SomeData VARCHAR(100)); 
DECLARE @dummyAccountDetail TABLE(lAccountDetail INT IDENTITY,lAccountID INT,sName VARCHAR(100),sAge INT);--do not store the age as int but the DoB!!! 

INSERT INTO @dummyAccount VALUES('Account 1'),('Account 2'); 
INSERT INTO @dummyAccountDetail VALUES(1,'Jane',20),(1,'John',30) 
            ,(2,'Tim',40),(2,'Tom',50); 

查询将列出账户为第一级(我加了一些descibing属性只是为了显示的原则,但你可以很容易地让他们离开子。每个单独核算 - 选择将创建一个XML。

SELECT A.lAccountID 
     ,A.SomeData 
     ,(
     SELECT D.lAccountID 
       ,D.sName 
       ,D.sAge 
     FROM @dummyAccountDetail AS D 
     WHERE D.lAccountID=A.lAccountID 
     FOR XML PATH('Values'),ROOT('Accounts'),TYPE 
     ) 

FROM @dummyAccount AS A  

您可以轻松创建表#tmpAccount只是

SELECT ... 
INTO #tmpAccount 
FROM ... 

...或者,如果它已经存在,只是我们e

INSERT INTO #tmpAccount 
SELECT ... 
+0

是的这个作品完美:) –

+0

@SenjutiMahapatra我很高兴看到这个!只有一个提示:既然你已经越过了15个代表点边界,你需要对贡献进行投票。接受和投票是两个不同的步骤。将Bhosale先生的答复表达出来是非常好的,因为它已经足够你的接受程度。如果你愿意,你可能还会投票给我答案。当然,整个投票是由你决定的,但它是与...一起运行的燃料... – Shnugo

+0

是的没问题。投了票:) –

1

选中此项。

  select distinct 
     (
      select 
      lAccountID, 
      sName, 
      sAge 
     from 
      AccountDVDetails 
      where 
      laccountID = 10 
     for xml raw ('Values'), ROOT ('Accounts'), ELEMENTS 
     )as XMLValue 
     ,lAccountID into #tmpAccount from AccountDVDetails 
     where 
     laccountID = 10 

     select * from #tmpAccount 
+0

谢谢。它的工作:) –