2013-06-05 25 views
5

Ben sadece bir select deyimi döndüren bir işlev oluşturmak çalışıyorum kullanılamaz, ancak hata veriyor: Bu benim kodTSQL Hata: bir dönüş değeri ile bir DÖNÜŞ ifadesi bu bağlamda

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

olduğunu :

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

sonra RETURN, bunu doldurmak, bana

cevap

6

Yanlış sözdizimi, hepsi bu:

Yani böyle bir şey gerekiyor. Bir "satır içi tablo değerli işlev"

varken CREATE FUNCTION ve örnek B

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

Döndünüz tabloyu açıklamak gerekir çözüm bildirin:

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

    INSERT @T 
    <select ...> 

    RETURN 
END 
+0

Benim masa view_sls olduğunu gerçekten büyük Bkz BEGIN gerekmez, bu yüzden tüm sütunları tanımlamak istemiyoruz tek tek, bir alternatif var mı? – HOY

10

İki şey: Yapıyı o tabloya

Sonra veri eklemek gerekir Eğer

  • dönmek istiyorum tablonun tanımlamak gerekir

    • Tablodaki verileri arayan kişiye döndürmek için RETURN; numaralı telefonu arayabilirsiniz.

      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

    Tablo view_sls'im gerçekten büyük, bu yüzden tüm sütunları tek tek tanımlamak istemiyorum, alternatif var mı? – HOY

    +0

    OP'nin çok satırlı bir TV değil, bir inline TVF istediğini varsayalım – gbn