5

I am just trying to create a function that returns a select statement, but it gives the error:

A RETURN statement with a return value cannot be used in this context.

This is my code:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
RETURN(
 SELECT * FROM View_sls
)

Please let me know the solution

HOY
  • 1,067
  • 10
  • 42
  • 85

3 Answers3

10

Two things:

  • you need to define the structure of the table you want to return
  • you need to add data into that table

Then you can call RETURN; to return that table's data to the caller.

So you need something like this:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS @returnTable TABLE 
                     (ContactID int PRIMARY KEY NOT NULL, 
                      FirstName nvarchar(50) NULL, 
                      LastName nvarchar(50) NULL, 
                      JobTitle nvarchar(50) NULL, 
                      ContactType nvarchar(50) NULL)
AS 
BEGIN
    INSERT INTO @returnTable
        SELECT ContactID, FirstName, LastName, JobTitle, ContactType
        FROM dbo.View_sls

    RETURN;
END 
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
  • My table view_sls is really big, so I don't want to define all the columns one by one, is there an alternative ? – HOY Jun 05 '13 at 12:20
  • I assume OP wants an inline TVF, not a multi-statement one – gbn Jun 05 '13 at 12:40
6

Wrong syntax, that's all. You don't need BEGIN when you have an "inline table-valued function"

See CREATE FUNCTION and example B

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
RETURN
(
 SELECT * FROM View_sls
);
GO
gbn
  • 422,506
  • 82
  • 585
  • 676
3

You need to describe the returned table, populate it, then RETURN:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS @RESULTS TABLE
(
  ID int, <other fields>
)
AS BEGIN

  INSERT @T
    <select ...>

  RETURN
END
Alex K.
  • 171,639
  • 30
  • 264
  • 288
  • My table view_sls is really big, so I don't want to define all the columns one by one, is there an alternative ? – HOY Jun 05 '13 at 12:19