#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()»