Question

I have 2 tables, contact and membership

Here is the data from my tables:

CONTACT:

SERIALNUMBER    TITLE   FIRSTNAME   SURNAME
     1           Mr       John        Doe
     2           Mrs      Jane        Doe

MEMBERSHIP:

MEMBERSHIPID    NAME    SERIALNUMBER
     1          TEST        1
     1          TEST        2

When I write the following SELECT statement:

SELECT * 
FROM CONTACT C
INNER JOIN MEMBERSHIP M
ON C.SERIALNUMBER=M.SERIALNUMBER
WHERE M.MEMBERSHIPID = '1'

I see the following results:

SERIALNUMBER    TITLE   FIRSTNAME   SURNAME MEMBERSHIPID    NAME    SERIALNUMBER
     1           Mr      John        Doe         1          TEST        1
     2           Mrs     Jane        Doe         1          TEST        2

Then I have written the following function:

CREATE FUNCTION [dbo].[fnGetMemberNames] (@MEMBERSHIPID VARCHAR(100))
RETURNS VARCHAR(50)
BEGIN
  DECLARE @name_to_return AS VARCHAR(50);
  SET @name_to_return = NULL;
  SELECT  @name_to_return =
             (C.TITLE + ' ' + C.FIRSTNAME + ' ' + C.SURNAME) 
  FROM CONTACT C
  INNER JOIN MEMBERSHIP M
    ON C.SERIALNUMBER=M.SERIALNUMBER
    WHERE M.MEMBERSHIPID=@MEMBERSHIPID;
  RETURN @name_to_return ;

END;

I call the function like this:

SELECT [dbo].[fnGetMemberNames](1)

But I only get one line of results.

Mrs      Jane        Doe

I should be seeing a carriage return OR comma delimited list with Mr John Doe

Was it helpful?

Solution

CREATE FUNCTION [dbo].[fnGetMemberNames] (@MEMBERSHIPID VARCHAR(100))
RETURNS VARCHAR(max)
BEGIN
  DECLARE @name_to_return AS VARCHAR(max);
  SET @name_to_return = NULL;
  SELECT  @name_to_return = ISNULL(@name_to_return,'') +
             (C.TITLE + ' ' + C.FIRSTNAME + ' ' + C.SURNAME) + Char(13) + Char(10) 
  FROM CONTACT C
  LEFT JOIN MEMBERSHIP M
    ON C.SERIALNUMBER=M.SERIALNUMBER
    WHERE M.MEMBERSHIPID=@MEMBERSHIPID;
  RETURN @name_to_return ;

END;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top