Я получаю данные из двух или более таблиц на основе условий, поэтому я пишу курсоры в SQL server2005 следующим образом:
create PROC [dbo].[uspCustomerInvoiceGetlist]
@CustomerID varchar(20)
AS
BEGIN
SELECT DeleteStatus,InvoiceID,CONVERT(varchar(16),CreationDate,101) + ' ' +
CONVERT(varchar(16),CreationDate,8) as CreationDate,AccountNumber,Sum(Amount) as Amount from tblInvoiceDetails where CustomerID=@CustomerID Group By InvoiceID,CreationDate,AccountNumber,DeleteStatus
END
alter procedure uspCustomerInvoiceGetlist1(@CustomerID varchar(50)) as
Begin
Declare @InvoiceID int, @Balance float
Declare MyCur Cursor for select InvoiceID from tblInvoiceHeader where CustomerID=@CustomerID
Open MyCur
Fetch next from mycur into @InvoiceID
While @@Fetch_Status=0
Begin
set @Balance=(select sum(Balance) from tblInvoicePaymentDetails where CustomerId=@CustomerID and InvoiceId=@InvoiceID)
print @Balance
if @Balance!=0
SELECT h.DeleteStatus,h.InvoiceID,CONVERT(varchar(16),h.CreationDate,101) + ' ' +
CONVERT(varchar(16),h.CreationDate,8) as CreationDate,h.AccountNumber,Sum(h.Amount) as Amount, @Balance as Balance from tblInvoiceDetails h inner join tblInvoicePaymentDetails p on h.CustomerID=p.CustomerID and h.InvoiceID=@InvoiceID
Group By h.InvoiceID,h.CreationDate,h.AccountNumber,h.DeleteStatus
else
SELECT DeleteStatus,InvoiceID,CONVERT(varchar(16),CreationDate,101) + ' ' +
CONVERT(varchar(16),CreationDate,8) as CreationDate,AccountNumber,Sum(Amount) as Amount, 0 as Balance from tblInvoiceDetails where CustomerID=@CustomerID and InvoiceID=@InvoiceID Group By InvoiceID,CreationDate,AccountNumber,DeleteStatus
Fetch Next From MyCUr into @InvoiceID
End
Close Mycur
Deallocate Mycur
End
вывод правильный, как этот (два выхода на основе условия два больше)
Status InvoiceID Date account no Amount Balance
1 1009 06/21/2011 10:22:15 10009 450 350
Status InvoiceID Date account no Amount Balance
1 1010 06/21/2011 10:22:33 100000 690 0
Но я могу связать все значения (оба) в виде сетки в ASP.NET 2.0. Как это возможно?