2013-06-05 3 views

Antwort

6

Falsche Syntax, das ist alles. Sie müssen nicht BEGIN benötigen, wenn Sie eine „Inline-Tabellenwertfunktion“ haben

Siehe CREATE FUNCTION und Beispiel B

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

Sie müssen die zurückgegebenen Tabelle beschreiben, es füllen, dann RETURN:

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

    INSERT @T 
    <select ...> 

    RETURN 
END 
+0

Mein Tisch view_sls ist wirklich groß, so will ich nicht alle Spalten definieren eins nach dem anderen, gibt es eine Alternative? – HOY

10

Zwei Dinge:

  • Sie brauchen die Struktur der Tabelle Sie
  • Sie Daten

Dann in dieser Tabelle hinzufügen müssen zurückkehren wollen definieren Sie können RETURN; aufrufen, um die Daten dieser Tabelle an den Aufrufer zurückzugeben.

Sie müssen also so etwas wie dieses:

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

Meine Tabelle view_sls ist wirklich groß, deshalb möchte ich nicht alle Spalten einzeln definieren, gibt es eine Alternative? – HOY

+0

Ich nehme an, OP will einen Inline TVF, nicht einen Multi-Statement – gbn

Verwandte Themen