使用表中的xml输出调用存储过程

时间:2011-11-21 17:47:18

标签: sql sql-server 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调用一个sproc?

1 个答案:

答案 0 :(得分: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