2011-11-21 38 views
0

在緊迫的最後期限之下,我知道我最終可以弄清楚這一點,但是我沒有太多時間自行完成。使用來自表格的xml輸出調用存儲過程

我有很多其他的附加列中爲用戶ID和賬戶號碼列的表。有可能是一個單一的客戶很多帳戶(具有相同的客戶ID,但不同的賬號很多行)。

對於表中的每個客戶,我需要調用一個存儲過程,並按照以下格式將數據從我的表中傳遞爲xml。請注意,xml適用於所有客戶帳戶。

<Accounts> 
<Account> 
    <AccountNumber>12345</AccountNumber> 
    <AccountStatus>Open</AccountStatus> 
</Account> 
<Account> 
    <AccountNumber>54321</AccountNumber> 
    <AccountStatus>Closed</AccountStatus> 
</Account> 
</Accounts> 

所以我想我需要幫助2件事情。首先,如何獲取這種XML格式的數據。我假設我將使用FOR XML的一些變體。另一件事是如何通過客戶ID做我組,然後調用每個客戶ID的存儲過程?

回答

2

像這樣的事情會工作。這是遊標少數情況之一。

create table #a (CustomerID int, AccountNumber int, AccountStatus varchar(max)) 

insert into #a values (1,12345,'Open') 
insert into #a values (1,54321,'Closed') 
insert into #a values (2,77777,'Open') 
insert into #a values (2,88888,'Closed') 

DECLARE @CustomerID int 
DECLARE @accounts xml 

DECLARE CurInvoice CURSOR READ_ONLY FAST_FORWARD FOR 
    SELECT DISTINCT CustomerID 
    FROM #a 

OPEN CurInvoice 

FETCH NEXT FROM CurInvoice INTO @CustomerID 
WHILE @@FETCH_STATUS = 0 
    BEGIN 

    set @accounts = (
    select AccountNumber,AccountStatus 
    from #a 
    where CustomerID = @CustomerID 
    for xml path('Account'), root('Accounts')) 

    exec MyProc @XmlInput = @accounts 


FETCH NEXT FROM CurInvoice INTO @CustomerID 
END 
CLOSE CurInvoice 
DEALLOCATE CurInvoice 
+0

你救了我的一天!!!!非常感謝!!! – user263097

相關問題