T-SQL | Пользовательские функции (UDF)

--возвращает самого крутого продавца по общему объёму продаж (SalesYTD)

--на заданной территории

USE [AdventureWorks]

GO

CREATE FUNCTION [dbo].[GetSalesPersonID](@TerritoryID as Int)

RETURNS int

AS

BEGIN

 -- Declare the return variable here

 DECLARE @Result int

 -- Add the T-SQL statements to compute the return value here

 SELECT top 1 @Result = SalesPersonId from Sales.SalesPerson

 where TerritoryID = @TerritoryID

 order by SalesYTD desc

 

 -- Return the result of the function

 RETURN @Result

END

 


Для разработки SQL-выражений, возращающих скалярный результат (Scalar Functions).

 

Принимают параметры (если задано).

Используются в выражениях запросов, а также везде, где допустимо использовать системные функции.

 

Например, функция принимает на входе два числа типа int (Num1 и Num2), сравнивает полученные числа и возвращает логического результат сравнения в формате bit (единицу или ноль):

 


CREATE FUNCTION [dbo].[Function1] (@Num1 int, @Num2 int)

RETURNS bit AS

BEGIN

if @Num1 > @Num2

 return 1

return 0

END


 

Использование функции в запросе:

 


SELECT            

CustomerID

,[Sales Pack]

,dbo.Function1([Sales Pack], 1000) AS [More than 1000]

FROM dbo.CustomerSalesData

 

Значением поля [More than 1000] является результат выполнения функции dbo.Function1 (True / False).

Параметры Function1: [Sales Pack] – "что сравнивать" и статическое значение 1000 – "с чем сравнивать"

 

 


См. также примеры:

 

Проверить с помощью IF

Выполнить SELECT запрос

Открыть CURSOR (Recordset), обработать в цикле

Рекурсивные функции

 



© 2018 | Анна Петросян | pashelp@yandex.ru