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;
T-SQL function does not return all values
-
31-05-2022 - |
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
Solution
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow