Запрос нескольких значений в функции и возврат внутри 1 переменной
Я хотел бы написать функцию, запрос к базе данных которой:
SELECT m.title, m.firstname, m.surname
FROM contact c
LEFT JOIN membership m
ON c.contactID=m.contactID
Вы видите, что я мог получить много контактов, возвращенных из вышеупомянутого запроса. Я хотел бы вернуть результаты в переменную в функции, чтобы я мог использовать глобально.
Я хочу, чтобы результаты функции отображались так:
Mr John Test
Mrs Jane Smith
Я хочу написать функцию, которая возвращает @MemberNames, как в примере с Джоном и Джейн...
Это то, что я пытался до сих пор:
CREATE FUNCTION fnGetMemberNames
(
@membershipID int,
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @MemberNames varchar(300)
SELECT m.title, m.firstname, m.surname
FROM contact c
LEFT JOIN membership m
ON c.contactID=m.contactID
WHERE membershipID=@membershipID
RETURN @MemberNames
END
2 ответа
Вы должны изменить свой оператор select следующим образом, а затем создать функцию, которая возвращает это значение:
SELECT (m.title + ' ' + m.firstname + ' ' + m.surname)
FROM contact c
LEFT JOIN membership m
ON c.contactID=m.contactID
В приведенном выше примере используется конкатенация строк и создается один столбец под заголовком столбца "Имя" из нескольких столбцов, в котором за именем человека следует пробел, затем имя человека, затем пробел, а затем фамилия.
Ваша функция будет выглядеть примерно так:
CREATE FUNCTION your_function (@ID INT)
RETURNS VARCHAR(50)
BEGIN
DECLARE @name_to_return AS VARCHAR(50);
SELECT @name_to_return =
(m.title + ' ' + m.firstname + ' ' + m.surname)
FROM contact c
LEFT JOIN membership m
ON c.contactID=@ID;
RETURN @name_to_return ;
END;
Делая это ответом, потому что переменная @ интерпретировалась как директива @user...
@PriceCheaperton - Посмотри, что написал Аззи:
Вам необходимо установить возвращаемую переменную равной значению. Прямо сейчас вы просто объявляете это как пустой varchar.
SELECT @MemberNames = (m.title + ' ' + m.firstname + ' ' + m.surname) FROM
// the rest of your query here
... как сказал Аззи.