2013-06-05 16 views
5

を使用することはできません私はselect文を返す関数を作成しようとしていますが、それはエラーを与える:TSQLエラー:戻り値を持つRETURN文は、この文脈で

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

は、これは私のコードです:

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

私はあなたがRETURNそして、それを移入、返されるテーブルを記述するために必要なソリューション

答えて

6

間違った構文を、それがすべてです。あなたは「インラインテーブル値関数」を持っているときは、CREATE FUNCTIONと例B

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

を教えてください:

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

    INSERT @T 
    <select ...> 

    RETURN 
END 
+0

私のテーブルview_slsを参照してください

BEGINを必要としない、本当に大きいですので、私はすべての列を定義する必要はありません1つ1つ、代わりがありますか? – HOY

10

2つのこと:

  • あなたがする必要があなたが次に

そのテーブルにデータを追加する必要が

  • を返すようにしたいテーブルの構造を定義RETURN;に電話して、そのテーブルのデータを呼び出し元に返すことができます。

    ですから、このようなものが必要です。

    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 
    
  • +0

    私のテーブルview_slsは本当に大きいので、私はすべての列を1つずつ定義したくありませんが、代替がありますか? – HOY

    +0

    私はオペレーションがマルチステートメントではなくインラインTVFを望んでいると思います – gbn

    関連する問題