One way to solve the problem would be to create a User-Defined Table Type to contain the first names, and then pass that table to a Scalar-valued Function.
CREATE TYPE FirstNames AS TABLE (firstName varchar(50), RandomSeed varchar(128))
GO
DECLARE @myFirstNames as FirstNames
INSERT INTO @myFirstNames
SELECT 'Bill', NEWID()
UNION SELECT 'Steve', NEWID()
UNION SELECT 'Jack', NEWID()
SELECT * FROM @myFirstNames
Next, create a Scalar-valued Function that takes your new table type as a parameter.
CREATE FUNCTION RandomFirstName(@TableName dbo.FirstNames READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SELECT TOP 1 @name = a.firstName
FROM @TableName a
ORDER BY a.RandomSeed
RETURN @name
END
Finally, call your function like so:
SELECT [dbo].[RandomFirstName] (@myFirstNames)