Почему я говорю, что моя функция не существует, даже если я думал, что функция была создана?

#sql-server-2012

#sql-server-2012

Вопрос:

Я должен создать функцию для вычисления InvoiceID,InvoiceTotal — PaymentTotal — CreditTotal. Итак, я создал функцию с именем fnNetOwed.Я должен запустить ее в этом синтаксисе:

 Select invoiceId, dbo.fnNetOwed(invoiceid) from invoices
Where dbo.fnNetOwed (invoiceid) >0
  

И получите те же результаты, как если бы я сделал

  Select invoiceID,InvoiceTotal - PaymentTotal - CreditTotal From     Invoices 
Where InvoiceTotal - PaymentTotal - CreditTotal>0
  

Это мой код для ее создания:
СОЗДАТЬ ФУНКЦИЮ fnNetOwed
(@GetInvoiceId Деньги)
ВОЗВРАЩАЕТ Int

 BEGIN
RETURN     (SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS 'OWED'
        FROM Invoices
        WHERE @GetInvoiceID = Invoices.InvoiceID);
END 
GO
  

Это то, что я использую для ее вызова / выполнения:
Выберите InvoiceID, fnNetOwed(98) из Invoices
Где fnNetOwed(98) > 0;
Это ошибка, которую я получаю при ее запуске:

Сообщение 195, уровень 15, состояние 10, строка 1 ‘fnNetOwed’ не является распознанным именем встроенной функции.

Комментарии:

1. Спасибо, я пробовал оба варианта, используя schmia, не сработало, но dbo сделал, но что-то не так в моей математике или размещении переменных. если он возвращает все идентификаторы счетов с одинаковым итогом. есть идеи по этому поводу. @Khaled,@Raymer Ortiz

Ответ №1:

Попробуйте вызвать ее, используя ваше имя схемы : SELECT schema.fnNetOwed(98)

Ответ №2:

Скалярные пользовательские функции SQL Server должны вызываться с использованием двух имен частей. Вы увидите эту ошибку, если попытаетесь вызвать функции, используя имя, состоящее из 1 части. Можете ли вы проверить, в этом ли проблема?

Итак, если ваше имя функции «function1» и определено в схеме dbo, то вместо

«выберите function1()» вы должны назвать это как «выберите dbo.function1()»