在一个紧迫的截止日期之前,我知道我最终可以解决这个问题,但我没有太多时间自己做。
我有一个表,其中包含客户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?
答案 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