SQL Server: принести все данные для всех пользователей - PullRequest
0 голосов
/ 24 февраля 2011

Я сделал один 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

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Вам необходимо вставить результаты вашего оператора извлечения в таблицу возвращаемых значений.

  CREATE FUNCTION dbo.fngetBalance()
  RETURNS @balanceTable TABLE
  (
     Parambalance bigint
  )
  AS
  BEGIN
     DECLARE getBalance CURSOR FOR
     SELECT [... insert your code here ...]

     DECLARE @balance bigint

     OPEN getBalance
     FETCH NEXT FROM getBalance
     INTO @balance
     WHILE @@FETCH_STATUS = 0
     BEGIN
       INSERT INTO @balanceTable VALUES(@balance)
       FETCH NEXT FROM getBalance
       INTO @balance
     END
     CLOSE getBalance
     DEALLOCATE getBalance
     RETURN   
  END
0 голосов
/ 24 февраля 2011

Звучит так, как будто вы хотите использовать табличную функцию .Вам нужно вернуть таблицу из функции.Примечание: чтобы сгенерировать пригодный набор результатов, вам нужно вызвать функцию следующим образом:

select * from myFunction

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...