У меня есть таблица, которая выглядит как
Event ID Date Instructor
1 1/1/2000 Person 1
1 1/1/2000 Person 2
Теперь я хочу вернуть эти данные, чтобы каждое событие находилось в одной строке, а все преподаватели были разделены на один столбец с тегом <br>
, например 'Person 1 <br> Person 2'
.
В настоящее время я сделал это, используя функцию
CREATE FUNCTION fnReturnInstructorNamesAsHTML
(
@EventID INT
)
RETURNS VARCHAR(max)
BEGIN
DECLARE @Result VARCHAR(MAX)
SELECT
@result = coalesce(@result + '<br>', '') + inst.InstructorName
FROM
[OpsInstructorEventsView] inst
WHERE
inst.EventID = @EventID
RETURN @result
END
Тогда моя основная хранимая процедура вызывает ее как
SELECT
ev.[BGcolour],
ev.[Event] AS name,
ev.[eventid] AS ID,
ev.[eventstart],
ev.[CourseType],
ev.[Type],
ev.[OtherType],
ev.[OtherTypeDesc],
ev.[eventend],
ev.[CourseNo],
ev.[Confirmed],
ev.[Cancelled],
ev.[DeviceID] AS resource_id,
ev.Crew,
ev.CompanyName ,
ev.Notes,
dbo.fnReturnInstructorNamesAsHTML(ev.EventID) as Names
FROM
[OpsSimEventsView] ev
JOIN
[OpsInstructorEventsView] inst
ON
ev.EventID = inst.EventID
Это очень медленно, я смотрю 4 секунды на вызов в БД. Есть ли способ для меня улучшить производительность функции? Это довольно маленькая функция, поэтому я не уверен, что я могу сделать здесь, и я не мог найти способ включить COALESCE в SELECT основной процедуры.
Любая помощь будет очень признательна, спасибо.