Jestem zdezorientowany z kolejnością wykonywania tego zapytania, proszę wyjaśnij mi to. Jestem mylony z tym, kiedy połączenie jest stosowane, wywoływana jest funkcja, nowa kolumna jest dodawana do przypadku i kiedy dodawany jest numer seryjny. Proszę wyjaśnić kolejność realizacji tego wszystkiego.Zamówienie wykonania zapytania SQL
select Row_number() OVER(ORDER BY (SELECT 1)) AS 'Serial Number',
EP.FirstName,Ep.LastName,[dbo].[GetBookingRoleName](ES.UserId,EP.BookingRole) as RoleName,
(select top 1 convert(varchar(10),eventDate,103)from [3rdi_EventDates] where EventId=13) as EventDate,
(CASE [dbo].[GetBookingRoleName](ES.UserId,EP.BookingRole)
WHEN '90 Day Client' THEN 'DC'
WHEN 'Association Client' THEN 'DC'
WHEN 'Autism Whisperer' THEN 'DC'
WHEN 'CampII' THEN 'AD'
WHEN 'Captain' THEN 'AD'
WHEN 'Chiropractic Assistant' THEN 'AD'
WHEN 'Coaches' THEN 'AD'
END) as Category from [3rdi_EventParticipants] as EP
inner join [3rdi_EventSignup] as ES on EP.SignUpId = ES.SignUpId
where EP.EventId = 13
and userid in (
select distinct userid from userroles
--where roleid not in(6,7,61,64) and roleid not in(1,2))
where roleid not in(19, 20, 21, 22) and roleid not in(1,2))
Ta funkcja jest wywoływana z powyższego zapytania.
CREATE function [dbo].[GetBookingRoleName]
(
@UserId as integer,
@BookingId as integer
)
RETURNS varchar(20)
as
begin
declare @RoleName varchar(20)
if @BookingId = -1
Select Top 1 @RoleName=R.RoleName From UserRoles UR inner join Roles R on UR.RoleId=R.RoleId Where [email protected] and R.RoleId not in(1,2)
else
Select @RoleName= RoleName From Roles where RoleId = @BookingId
return @RoleName
end
Poza tematem, ale najprawdopodobniej będzie o wiele lepiej wyłączyć porzucenie tego UDF i wprowadzenie logiki w linii. –