Я пытаюсь написать процедуру, которая будет возвращать контактные данные для нескольких человек в зависимости от типа учетной записи.
Я использую if
и unions
для получения данных, однако я также хочу заказать запрос в proc, но я не уверен в лучшем методе.
Вот мой запрос:
SELECT Name, Type, RecipientId FROM (
IF(@EntityType = 'Tenant')
BEGIN
SELECT
c.Title + ' ' + c.FirstName + ' ' + c.LastName AS Name,
'Tenant' AS [Type],
tc.TenantId AS [RecipientId],
1 AS DisplayOrder
FROM
Tenant.Account tc
WHERE
tc.AccountId = @EntityId
UNION
SELECT
c.Title + ' ' + c.FirstName + ' ' + c.LastName AS Name,
tc.Relationship AS [Type],
tc.ContactId AS [RecipientId],
2 AS DisplayOrder
FROM
Tenant.Contacts tc
JOIN
General.Contact c ON tc.ContactId = c.ContactId
WHERE
tc.ContactId = @EntityId
END
IF(@EntityType = 'Landlord')
BEGIN
SELECT
c.Title + ' ' + c.FirstName + ' ' + c.LastName AS Name,
'Landlord' AS [Type],
tc.LandlordId AS [RecipientId],
2 AS DisplayOrder
FROM
Landlords.Account tc
WHERE
tc.LandlordId = @EntityId
UNION
SELECT
c.Title + ' ' + c.FirstName + ' ' + c.LastName AS Name,
tc.Relationship AS [Type],
tc.ContactId AS [RecipientId],
1 AS DisplayOrder
FROM
Landlords.Contacts tc
JOIN
General.Contact c ON tc.ContactId = c.ContactId
WHERE
tc.ContactId = @EntityId
END) a
ORDER BY a.DisplayOrder
Это вызывает ошибку при использовании IF в подзапросе, поэтому любые предложения приветствуются, так как это очень длинный запрос, в котором необходимость заказа отображения из proc только что стала требованием.