Запрос нескольких значений в функции и возврат внутри 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

... как сказал Аззи.

Другие вопросы по тегам