Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

ContactType nvarchar(50) NULL




)

AS

BEGIN

DECLARE

@FirstName nvarchar(50),

@LastName nvarchar(50),

@JobTitle nvarchar(50),

@ContactType nvarchar(50);

-- Присвоение общей информации

SELECT

@ContactID = ContactID,

@FirstName = FirstName,

@LastName = LastName

FROM Person.Contact

WHERE ContactID = @ContactID;

SELECT @JobTitle =

CASE

-- Проверка служащих

WHEN EXISTS(SELECT * FROM HumanResources.Employee AS e

WHERE e.ContactID = @ContactID)

THEN (SELECT Title

FROM HumanResources.Employee

WHERE ContactID = @ContactID)

-- Проверить продавцов

WHEN EXISTS(SELECT * FROM Purchasing.VendorContact AS vc

INNER JOIN Person.ContactType AS ct

ON vc.ContactTypeID = ct.ContactTypeID

WHERE vc.ContactID = @ContactID)

THEN (SELECT ct.Name

FROM Purchasing.VendorContact AS vc

INNER JOIN Person.ContactType AS ct

ON vc.ContactTypeID = ct.ContactTypeID

WHERE vc.ContactID = @ContactID)

-- Проверить магазины

WHEN EXISTS(SELECT * FROM Sales.StoreContact AS sc

INNER JOIN Person.ContactType AS ct

ON sc.ContactTypeID = ct.ContactTypeID

WHERE sc.ContactID = @ContactID)

THEN (SELECT ct.Name

FROM Sales.StoreContact AS sc

INNER JOIN Person.ContactType AS ct

ON sc.ContactTypeID = ct.ContactTypeID

WHERE ContactID = @ContactID)

ELSE NULL

END;

SET @ContactType =

CASE

-- Проверить служащих

WHEN EXISTS(SELECT * FROM HumanResources.Employee AS e

WHERE e.ContactID = @ContactID)

THEN 'Employee'

-- Проверить продавцов

WHEN EXISTS(SELECT * FROM Purchasing.VendorContact AS vc

INNER JOIN Person.ContactType AS ct

ON vc.ContactTypeID = ct.ContactTypeID

WHERE vc.ContactID = @ContactID)

THEN 'Vendor Contact'

-- Проверить магазины

WHEN EXISTS(SELECT * FROM Sales.StoreContact AS sc

INNER JOIN Person.ContactType AS ct

ON sc.ContactTypeID = ct.ContactTypeID

WHERE sc.ContactID = @ContactID)

THEN 'Store Contact'

-- Проверить покупателей

WHEN EXISTS(SELECT * FROM Sales.Individual AS i

WHERE i.ContactID = @ContactID)

THEN 'Consumer'

END;

-- формирование вызываемой информации

IF @ContactID IS NOT NULL

BEGIN

INSERT INTO @retContactInformation

SELECT @ContactID, @FirstName, @LastName, @JobTitle, @ContactType;

END;

RETURN;

END;

GO

Обращение к функции:

USE AdventureWorks;

GO

SELECT ContactID, FirstName, LastName, JobTitle, ContactType

FROM dbo.ufnGetContactInformation (2200);

 

Результат:

 

Пользовательские функции, возвращающие тип данных table, могут быть полноценной альтернативой представлениям. Ссылка на эти функции происходит как на возвращающие табличное значение функции. Возвращающая табличное значение пользовательская функция может быть использована там, где в запросах Transact-SQL разрешены табличные выражения или выражения представлений. В то время как представления ограничены одной инструкцией SELECT, пользовательские функции могут содержать дополнительные инструкции, обеспечивающие более эффективную логику, чем та, которая возможна в представлениях.

Возвращающая табличное значение пользовательская функция также может заменять хранимые процедуры, возвращающие один результирующий набор. На таблицу, возвращаемую пользовательской функцией, можно ссылаться в предложении FROM инструкции Transact-SQL, в котором нельзя ссылаться на хранимые процедуры, возвращающие результирующие наборы.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...