Я сделал один sp, который проверяет, доступен ли пользователь или нет. sp вычисляет баланс пользователей.
Теперь, если пользователь выбран из пользовательского интерфейса, он работает нормально. но если он не выбран, то мне нужно привести баланс для всех пользователей приложения.
Для этого я сделал курсор, который поднимает баланс для всех пользователей. Но у моего sp есть много случаев, когда и помещать курсор внутрь, это неосуществимое решение.
Следовательно, я сделал функцию, но выдал ошибку
Операторы выбора, включенные в функцию, не могут возвращать данные клиенту.
Я использую SQL Server 2005. Пожалуйста, помогите мне.
ОБНОВЛЕНО: ФУНКЦИЯ ДОБАВЛЕНА
ALTER FUNCTION dbo.fngetBalance()
RETURNS @balanceTable TABLE
(
Parambalance bigint
)
AS
BEGIN
--INSERT INTO @balanceTable (Parambalance) VALUES (1)
DECLARE getBalance CURSOR
FOR
SELECT temp2.BillCharge - temp2.Receipt - temp2.AdjustedAmt AS Balance from
(SELECT SUM(Fees) AS BillCharge, temp.* FROM BillDetail
JOIN
(SELECT
BillDetail.PatientID,
CONVERT(VARCHAR(15), dbo.Examination.ExamDt, 101) AS BillDate,
'Payment received' AS DescOfService,
Payment.BillID AS BillID,
SUM(Isnull(Payment.PlanPaid, 0)) + SUM(IsNull(Payment.PatPaid, 0)) as Receipt,
SUM(ISNULL(Payment.WriteOff1, 0)) + SUM(IsNUll(Payment.Writeoff2, 0)) as AdjustedAmt
--Examination.ExamDt
FROM
Billdetail
JOIN Payment ON Payment.BillDetailID = BillDetail.BillDetailID
JOIN dbo.Examination ON dbo.BillDetail.ExaminationID = dbo.Examination.ExaminationID
GROUP BY Payment.BillID, Examination.ExamDt,BillDetail.PatientID) temp ON
temp.BillID = Billdetail.BillID
GROUP BY temp.BillID, temp.Receipt, temp.AdjustedAmt,temp.BillDate, temp.DescOfService, temp.PatientID) AS temp2
ORDER BY temp2.PatientID
--SELECT temp-temp2 AS balance from
--(SELECT SUM (BillDetail.Fees) AS fees FROM dbo.BillDetail GROUP BY billdetail.PatientID) AS temp
--JOIN
--(SELECT SUM (payment.planPaid) + SUM(payment.patpaid) + SUM (Payment.WriteOff1) + SUM (Payment.WriteOff2) AS payment
--FROM dbo.Payment GROUP BY payment.PatientID) temp2
OPEN getBalance
FETCH NEXT FROM getBalance
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM getBalance
END
CLOSE getBalance
DEALLOCATE getBalance
RETURN
END